加载共享库时出错

uly*_*is2 5 bash shared-libraries

谢谢你们回答我之前关于函数未定义引用的问题。正如您所建议的,问题的原因不是链接库。现在我已经生成了可执行文件:(我的g++和gcc的版本是4.4.5。我使用的是Ubuntu 10.10。)

g++ -o ex_addinst  ./ex_addinst.o -L/home/li/work/tools/lindo/lindoapi/bin/linux64 -m64 -llindo64  -lmosek64 -lconsub3 -lc -ldl -lm -lguide -lpthread -lsvml -limf -lirc
Run Code Online (Sandbox Code Playgroud)

但是当我运行可执行文件时又出现了另一个问题

./ex_addinst
Run Code Online (Sandbox Code Playgroud)

出现错误:(我不确定当前是否应该开始一个新问题......)

./ex_addinst: error while loading shared libraries: liblindo64.so.6.0: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但 liblindo64.so.6.0 存在于 lib ~/lindoapi/bin/linux64 的文件夹中,其中包含以下文件:

libconsub3.so  libirc.so          liblindojni.so        libmosek64.so.5.0  lindo.par
libguide.so    liblindo64.so      liblindojni.so.6.0.3  libsvml.so         placeholder
libimf.so      liblindo64.so.6.0  libmosek64.so         lindoapivars.sh    runlindo
Run Code Online (Sandbox Code Playgroud)

我在 liblindo.so.6.0 和 liblindo.so 之间创建了一个符号链接:

ln -sf liblindo64.so.6.0 liblindo64.so
Run Code Online (Sandbox Code Playgroud)

有'-llindo64'是g ++命令,所以我认为 liblindo64.so.6.0应该已经链接。我尝试将 -L 更改为 -Llib,但没有帮助。

谁能告诉我这里出了什么问题吗?谢谢!

Mat*_*Mat 2

您需要.so在运行时链接器的搜索路径中包含文件所在的目录。

您可以通过更改LD_LIBRARY_PATH环境变量来做到这一点,如下所示:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/lindoapi/bin/linux64
Run Code Online (Sandbox Code Playgroud)

在启动可执行文件之前。