Bash 加载共享库时出错
谢谢你们回答我之前的问题。正如您所建议的,问题的原因是没有链接库。现在我已经用以下代码生成了可执行文件:(我的g++和gcc的版本是4.4.5。我使用的是Ubuntu 10.10。) 但是,当我运行可执行文件时,会出现另一个问题Bash 加载共享库时出错,bash,shared-libraries,Bash,Shared Libraries,谢谢你们回答我之前的问题。正如您所建议的,问题的原因是没有链接库。现在我已经用以下代码生成了可执行文件:(我的g++和gcc的版本是4.4.5。我使用的是Ubuntu 10.10。) 但是,当我运行可执行文件时,会出现另一个问题 ./ex_addinst 出现错误:(我不确定是否应该开始一个新问题,或者当前没有…) 但是liblindo64.so.6.0存在于lib~/lindoapi/bin/linux64的文件夹中,该文件夹包含以下文件: libconsub3.so libirc.so
./ex_addinst
出现错误:(我不确定是否应该开始一个新问题,或者当前没有…)
但是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
我在liblindo.so.6.0和liblindo.so之间创建了一个符号链接:
ln -sf liblindo64.so.6.0 liblindo64.so
“-llindo64”是g++命令,因此我认为应该链接liblindo64.so.6.0。
我试着把-L改成-Llib,但没用
谁能告诉我这里怎么了?谢谢 您需要在运行时链接器的搜索路径中找到
文件所在的目录
您可以通过如下方式更改LD\u LIBRARY\u PATH
环境变量来完成此操作:
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/lindoapi/bin/linux64
启动可执行文件之前。如果您不打算将当前位于/home/li/work/tools/lindo/lindoapi/bin/linux64
下的库安装到系统目录(/usr/lib
,/usr/local/lib
等)中,那么最好简单地链接应用程序,使其正常工作(TM):
这比始终必须设置LD\u LIBRARY\u PATH
更可取,因为
- 其他人可以运行您的可执行文件(无需设置
LD_LIBRARY_PATH
)和
- 它不会减慢所有其他应用程序的速度(否则它们都会搜索
LD\u LIBRARY\u PATH
以查找libc.so.6
,等等)
您的LD\u LIBRARY\u PATH
设置不起作用的原因(对Mat的答案的评论)是您在/HOME
的预期位置使用了/HOME
。总结解决方案:
我使用以下命令将路径添加到~./bashrc:
导出LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/../lindoapi/bin/linux64
(生成.o文件后)将目标文件链接到:
g++-o ex_addinst./ex_addinst.o-L/home/../lindoapi/bin/linux64-m64-llindo64-lmosek64-lconsub3-lc-ldl-lm-lguide-lpthread-lsvml-limf-lirc
感谢Mat,在directional HOME/../lindoapi/bin/linux64中,有一个lindoapivars.sh文件,其中LD_LIBRARY_路径被修改为:LD_LIBRARY_PATH=$LD_LIBRARY_PATH:HOME/li/work/tools/lindo/lindoapi/bin/linux64导出LD_LIBRARY_路径。但是问题还是出现了..那个字符串是HOME
还是$HOME
?对不起,是$HOME,我的打字错误。由于lindoapivars.sh中有内容,我认为这不是更改此变量的正确位置。感谢朋友,根据您的建议,我将库添加到了~/.bashrc:export LD_library_PATH=$LD_library_PATH:$HOME/li/work/tools/lindo/lindoapi/bin/linux64中,但问题仍然是一样的。我更改~/.bashrc正确吗?我想我是在起诉未登录的shell,所以我想只有~/.bashrc被读取。它现在可以工作了…太奇怪了…我很高兴,谢谢你的帮助@垫子
ln -sf liblindo64.so.6.0 liblindo64.so
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HOME/lindoapi/bin/linux64
gcc -o ex_addinst ./ex_addinst.o \
-L/home/li/work/tools/lindo/lindoapi/bin/linux64 \
-Wl,-rpath=/home/li/work/tools/lindo/lindoapi/bin/linux64 \
-m64 -llindo64 -lmosek64 -lconsub3 -lc -ldl \
-lm -lguide -lpthread -lsvml -limf -lirc