为了进一步解释我的情况。我知道使用动态库时,需要将库路径导出到LD_LIBRARY_PATH,以便可执行文件在运行时可以找到它们。如果我不这样做,将出现一个错误,即找不到共享库。
现在,如果添加以下链接器标志“ -L / path / to / library / -lthelibrary.so”,则可以运行我的可执行文件,而无需将库路径导出到LD_LIBRARY_PATH。
为什么是这样?
最佳答案
首先,通常不需要设置LD_LIBRARY_PATH
来运行二进制文件。加载程序使用此环境变量查找其他位置,以查找要执行二进制文件时要加载的.so
文件。
如果二进制文件引用的一个或多个LD_LIBRARY_PATH
文件与编译时所在的位置不同,则需要设置.so
。如果任何直接引用的.so
文件所依赖的内容与创建.so
文件时所用的内容不同,则也需要它。
使用ldd
命令检查二进制文件中的依赖项信息,以更清楚地了解创建二进制文件时链接程序保存的内容。
关于c - 将库路径导出到LD_LIBRARY_PATH和在链接时使用-L标志有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12215195/