gcc链接选项-L:指定动态库路径的替代方法

3
如果我使用“-L.”编译我的源代码,就可以找到动态库libmd5.so。
gcc main.c -g -O2 -Wall -o main -L. -lmd5 -lcr

但是如果我不使用“-L”选项,链接器将无法找到动态库。我该如何更改而不必调用“-L”呢?
(附加信息:libmd5.so和libmd5.so.1.0.1位于/home/user/ba目录中)
2个回答

8

使用-L标志没有什么问题,所以不需要刻意去除它。如果在运行时系统无法加载你链接的库文件,这时候就会出现问题。以下是一些解决方案:

  • 将/home/user/ba加入到/etc/ld.so.conf(或类似的配置文件中,视操作系统而定),然后运行ldconfig命令。这样做将对整个系统生效。
  • 设置LIBRARY_PATH(用于编译链接)和LD_LIBRARY_PATH(用于运行时)环境变量:export LD_LIBRARY_PATH=/home/user/baexport LIBRARY_PATH=/home/user/ba。这只对当前shell会话有效。
  • 在可执行文件中设置rpath(但在这种情况下仍然需要使用-L .参数)。将-L /home/user/ba -Wl,-rpath,/home/user/ba添加到链接器标志中。这只对正在构建的可执行文件有效。
  • 将共享库放置在系统范围内的库搜索路径(例如/usr/lib)中。这样做将对整个系统生效。

以上几种方法对运行时也会产生影响——当你运行应用程序时,它将在/home/user/ba或其他系统定义的库搜索路径中查找libmd5.so。


谢谢。我并不真的想要去除它。但是我不知道如何更改automake,以便在使用Anjuta编译我的项目时包含“-L.”。 - OldMacDonald

1
你可以设置LIBRARY_PATH环境变量。
export LIBRARY_PATH=/home/user/ba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接