c - gcc 链接选项 -L : Alternative ways how to specify the path to the dynamic library

标签 c gcc dynamic linker

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

关于c - gcc 链接选项 -L : Alternative ways how to specify the path to the dynamic library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374767/

相关文章:

c - 忽略系统调用

R 设置变量等于函数返回的值。每次调用时再次重新评估变量

c - 如何解决Eclipse CDT中的 "Undefined reference to function"?

c - memcpy函数的实现

c - 我怎么知道 gcc 是否同意某些东西是易变的?

android - 带有添加按钮的动态 View ,如何找到唯一的 edtxt ID 或其他任何东西

java - 更改for循环的顺序?

c - 如何通过CreateFile获取USB打印机文件名以进行原始直接打印?

c - 查找具有相同设置位数的下一个更大的数字

c - 在不同级别使用不同的枚举类型