gcc链接选项-L:如何指定动态库路径的其他方法

如果我用“-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)

-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。

您可以设置LIBRARY_PATH环境变量。

 export LIBRARY_PATH=/home/user/ba