当存在`LD_LIBRARY_PATH`时,使用`-L`有什么意义?

hou*_*oft 0 c linux linker gcc

在阅读完这个问题后,我的第一反应是用户没有看到错误,因为他指定了库的位置-L.

但是,显然,该-L选项仅影响链接器所在的位置,并且在您尝试运行已编译的应用程序时不会影响加载器的外观.

我的问题是什么意思-L?既然你无法运行你的二进制文件,除非你有任何正确的目录LD_LIBRARY_PATH,为什么不把它们放在那里,并放弃-L,因为链接器LD_LIBRARY_PATH自动查找?

apm*_*ell 6

可能是您正在进行交叉编译,链接器的目标是您自己以外的系统.例如,MinGW可用于在Linux上编译Windows二进制文件.这里-L将指向链接所需的DLL,并LD_LIBRARY_PATH指向链接器运行所需的任何库.这允许编译和链接不同的体系结构,OS ABI或处理器类型.

在尝试构建特殊目标时,它也很有用.我可能会将一个静态版本的程序与一个不同的静态库链接起来.这是Linux From Scratch的第一步,在主系统上创建一个单独的迷你环境,成为一个chroot监狱.