gpt4 book ai didi

linux - -L/libpath 和/etc/ld.so.conf 有什么区别 配置gcc/g++编译的libpath

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:29 24 4
gpt4 key购买 nike

我编译我的代码,但失败了。

# g++ -g test.cpp -o test -lboost_filesystem                                  
/tmp/cc5yybJZ.o(.text+0xb0): In function `__static_initialization_and_destruction_0':
/usr/local/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/tmp/cc5yybJZ.o(.text+0xbc):/usr/local/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/tmp/cc5yybJZ.o(.text+0xc8):/usr/local/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
/tmp/cc5yybJZ.o(.gnu.linkonce.t._ZN5boost10filesystem9file_sizeERKNS0_4pathE+0x19): In function `boost::filesystem::file_size(boost::filesystem::path const&)':
/usr/local/include/boost/filesystem/operations.hpp:447: undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
collect2: error: ld returned 1 exit status

但是我用-L/usr/local/lib 编译成功了

g++ -g test.cpp -o test -lboost_filesystem -L/usr/local/lib

/usr/local/lib 已经配置在/etc/ld.so.conf

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/lib64
/usr/local/lib
/usr/local/mpc/lib
/usr/local/mpfc/lib

这是什么原因?
-L/libpath 和/etc/ld.so.conf 配置libpath 有什么区别?

最佳答案

/etc/ld.so.conf 由动态链接器使用(请参阅联机帮助页 ld.so(8))确定要搜索哪些路径库文件。这发生在运行时。

您仍然需要将 -L/usr/local/lib 传递给 gcc,后者会将其传递给 ld(请参阅联机帮助页ld(1))。这发生在编译时。

为什么 gccld 不自动查找 /etc/ld.so.conf 中的路径?我猜有几个可能的原因:(1)有更多像这样的自动行为使系统更复杂,更难理解; (2) gcc 在具有不同动态链接器(或根本没有)的系统上运行; (3) 也许该行为不是您想要的,然后您需要一些额外的方法来关闭它。

无论如何,在大多数 Linux 系统上,您只会有一个包管理器将库放在正确的位置(通常是 /usr/lib),所以这通常不是问题.否则,通常只定义您自己的 CFLAGS 变量以包含必要的 -L... 指令。

还可以通过修改 spec file 来配置 gcc 自动传递各种 -L... 指令(除其他外) .

关于linux - -L/libpath 和/etc/ld.so.conf 有什么区别 配置gcc/g++编译的libpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14179969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com