undefined symbol: _ZN5boost15program_options22error_with_option

log: undefined symbol: _ZN5boost15program_options22error_with_option_name15set_option_nameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

这种报错都是因为 编译链接阶段运行阶段 看到的lib不一致导致的。

root cause:

  1. 编译阶段用了 -I(大写的i)/xxx/boost/boost-1.80.0版本的boost库,并且 -L/xxx/boost/boost-1.80.0/linuxlib, -l(小写的L)boost_program_options。这个地方的问题在于:
    • /xxx/boost/boost-1.80.0 目录下,只有 boost_program_options.a, 没有对应的 .so。并且/xxx/boost/boost-1.80.0/linuxlib不在LD_LIBRARY_PATH列表里(当然在列表里也没有用,因为没有对应的.so)。
    • 在系统的默认搜索路径/lib64目录下,找到了 boost_program_options.so,于是编译出来的 out.so 就认为自己需要/lib64目录下的boost_program_options.so(这是当ldd out.so的时候,其输出显示其依赖一个低版本的boost的原因)。
    • gcc manual明确说了优先使用 .so, 参考这里

      -l library
      If both static and shared libraries are
      found, the linker gives preference to linking with the shared library unless the
      -static option is used.

  2. 在运行阶段,于是就报错undefined symbol

解决方法:

法1:很简单,找一个1.80.0版本的boost_program_options.so,把其路径加到LD_LIBRARY_PATH里。
法2:链接阶段如果想使用.a的时候,不需要-L/-l, 直接在link阶段,像加一个 .o 那样,直接 g++ file1.o file2.o /xx/boost_program_options.a 去显示的使用 .a

总结:

系统的默认搜索路径/lib64下有一个boost_program_options.so是原罪,如果没有的话,在链接阶段-L/-l的时候,因为没有找到libboost_program_options.so, 所以会去转而使用boost_program_options.a, 这个 .a文件在/xxx/boost/boost-1.80.0目录下是存在的,也就避免了上面这一系列的问题。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
undefined symbol: _ZN5ECore9instancesEv 是一个未定义的符号。根据引用的报错信息,这个未定义的符号出现在 libORB_SLAM3.so 中。在这个报错信息中,_ZN5ECore9instancesEv 是一个符号的名称,该符号未被正确定义或链接。这可能是由于在编译或链接过程中缺少相关的库文件或定义引起的。 请检查您的编译和链接过程,确保所有的依赖库文件被正确链接。您可能需要检查相关的库文件是否存在、是否正确安装,并确保正确设置相关的环境变量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [undefined symbol问题的查找、定位与解决方法](https://blog.csdn.net/buknow/article/details/96130049)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Debug报错:libORB_SLAM3.so: undefined symbol: _ZN5DBoW24FORB1LE](https://blog.csdn.net/qq_41035283/article/details/128301376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值