如果我用“-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/ba
和export LIBRARY_PATH=/home/user/ba
。这仅对当前 shell 有效。 - 在可执行文件中设置 rpath(尽管此处您仍然需要
-L .
)。将-L/home/user/ba -Wl,-rpath,/home/user/ba
添加到您的链接器标志。这将仅对您正在制作的可执行文件有效。 - 将您的共享库放在系统范围的库搜索路径中,例如
/usr/lib
。这将是全系统的。
以上内容在运行时也有影响 - 当您运行应用程序时,它会尝试在/home/user/ba 或系统的其他库搜索路径中查找 libmd5.so。
关于c - gcc 链接选项 -L : Alternative ways how to specify the path to the dynamic library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374767/