c - 将库路径导出到 LD_LIBRARY_PATH 和在链接时使用 -L 标志有什么区别?

标签 c linker shared-libraries

进一步解释我的情况。我知道当您使用动态库时,您需要将库路径导出到 LD_LIBRARY_PATH,以便可执行文件在运行时能够找到这些库。如果我不这样做,就会出现错误,无法找到共享库。

现在,如果我添加以下链接器标志“-L/path/to/library/-lthelibrary.so”,我可以运行我的可执行文件,而无需将库路径导出到 LD_LIBRARY_PATH。

这是为什么?

最佳答案

首先,您通常不需要设置LD_LIBRARY_PATH来运行二进制文件。加载程序使用此环境变量来查找其他位置来查找要在执行二进制文件时加载的.so文件。

如果您的二进制文件引用的一个或多个 .so 文件在其所在位置不可用,则您需要设置LD_LIBRARY_PATH被编译。如果任何直接引用的 .so 文件依赖于创建 .so 文件时不可用的内容,则也需要它。

使用ldd命令检查二进制文件中的依赖关系信息,以便更清楚地了解创建二进制文件时链接器保存的内容。

关于c - 将库路径导出到 LD_LIBRARY_PATH 和在链接时使用 -L 标志有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12215195/

相关文章:

linux - 我如何找到一个库是否安装在 linux 中?

c - 合并排序逻辑错误

c - 深复制一个结构到另一个

linker - 'dlsym' 的库在哪里

gcc - 为什么我的二进制文件比我的目标文件小得多?

c++ - 使用多个库时,在 CMakeList 中配置 target_link_libraries 的正确方法是什么?获取无法指定链接库错误

java - JNA Native.loadLibrary产生内存故障: __memmove_avx_unaligned_erms

c - 如何将 long long int 的数字放入 long long int 数组

c - 为什么可变长度数组不能全局使用?

c++ - gmp 的 libgmp.so 有什么依赖?我不断收到 undefined reference