查看动态链接库symbol

在centos上装了两个版本的gcc,4.8和7.3,编译程序遇到链接问题。找不到xx的引用。“undefined reference to ...”。明明刚才编译出来的库一链接就是找不到符号。

找不到符号那就先查看一下动态(静态)链接库的符号。用命令

nm -g libcryptopp-arm64.a | c++filt | grep BufferedTransformation::ChannelFlush | grep " T "

use nm to dump global symbols, and use c++filt to demangle:

The capitol T means you are searching for symbols that are defined and exported. Lower t means its defined but not exported - i.e., private. Capitol U means its undefined.

以上摘自https://stackoverflow.com/questions/28311795/undefined-symbols-in-crypto-ios-64-bit-project

查看的结论是链接文件和被链接文件编译时默认用了不同的编译器,include的c++标准库头文件不同导致函数调用时参数类型不匹配,从而找不到符号。std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > 7.3下的string,4.8下为std::basic_string(大概是这样,现已改为用7.3,4.8的类型名没记太清)

这里必须吐槽 一下centos,C++11都出来8年了,yum源的gcc还不支持C++11,导致必须得自己手动编译配置gcc,结果系统就存在两个版本编译器。编译库时,一旦配置没注意就导致问题。

最后特别说明一下,编写CMake时,最好指定一下编译器

set(CMAKE_C_COMPILER "/usr/local/bin/gcc")
SET(CMAKE_CXX_COMPILER "/usr/local/bin/g++")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值