关于 LIBRARY_PATH 和 LD_LIBRARY_PATH

来源:互联网 发布:雷克萨斯rx 知乎 编辑:程序博客网 时间:2024/05/22 17:19

C程序中要link某个动态库,比如放在 /usr/bin/boost/lib 下的 libboost_thread.so,而 Makefile 中没有指明在哪个路径下去 link,这时 link 可能会找不到正确的动态库。例如会得到类似下面的错误:

g++ -o ../bin/thread ../obj/main.o ../obj/dmd.o ../obj/thread.o -lboost_thread -lboost_system
/usr/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status
make: *** [../bin/thread] Error 1

解决办法有二,其一,从 Makefile 入手:

BOOST_LIB_DIR = /usr/bin/boost/lib

LNK_OPT = -L$(BOOST_LIB_DIR) -lboost_thread -lboost_system

明确告诉 make 从哪里去 link 动态库文件。

其二,修改环境变量 LIBRARY_PATH:

export LIBRARY_PATH="/usr/bin/boost/lib":$LIBRARY_PATH

在环境变量 LIBRARY_PATH 中加入正确的动态库路径

接下来,在运行程序 thread 时,遇到下面的错误提示

./thread: error while loading shared libraries: libboost_thread.so.1.52.0: cannot open shared object file: No such file or directory

即运行时加载动态库失败,没有找到要加载的动态库 libboost_thread.so.1.52.0(实际上该动态库位于 /usr/bin/boost/lib)。解决办法如下:

export LD_LIBRARY_PATH="/usr/bin/boost/lib":$LD_LIBRARY_PATH

即在环境变量 LD_LIBRARY_PATH 中加入正确的动态库路径。

原创粉丝点击