链接报错undefined reference to + libc++和libstdc++

1  问题现象

subscribe(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'

描述:编译的时候,最后的链接中一直没成功

2 可能原因

2.1 链接时缺失了相关目标文件(.o)

eg: main.o中有func需要链接 func1.o,缺少了func1.o

2.2 链接时缺少相关的库文件(.a/.so)

2.3链接的库文件中又使用了另一个库文件,库嵌套链接别的库

把需要链接的库都补上,可以用readelf -d .so 查看该库还链接了其他的啥库

2.4多个库文件链接顺序问题

要求顺序:cmake中链接库,依赖其他库的库一定要放到被依赖库的前面

2.5在c++代码中链接c语言的库

main.cpp 的c++ 代码链接库中的函数是由c代码生成的;

导致: main.cpp 为 c++ 代码,调用了 c 语言库的函数,因此链接的时候找不到;

解决方法:链接的库对应的头文件中API 添加一个 extern “C” 的声明,重新编译后的库进行main.o链接

2.6 两端的gcc版本对应的libstdc++版本不一致

原因说明:需要链接库的main编译环境使用的编译器gcc版本的libstdc++版本和提供的库(被链接的)编译环境中使用的gcc版本的libstdc++版本不一致;

解决方法:同步gcc版本的同时同步libstdc++版本,具体步骤如下:

2.6.1升级gcc保持同步

如果升级gcc后还是编译链接不通过,查看下libstdc++版本进行单独的升级,首先下载自己需要的libstdc++.so.6.0.xx版本,放在usr/lib64后,执行

rm -rf /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.26 libstdc++.so.6

2.7链接了使用不同的_GLIBCXX_USE_CXX11_ABI宏编译的目标,导致main链接不到库的func

解决方法:cmake指定链接版本,尝试显示定义main编译的目标宏,同步main和库的编译宏定义

2.8 main和被链接的库分别使用libstdc++、libc++两套不同的c++标准库

说明:

在C++编译中,编译器需要链接到一个C++标准库来提供标准模板、函数、容器等。不同的编译器可能提供不同的库实现,例如:

GNU的libstdc++:GCC编译器的标准C++库。
LLVM的libc++:Clang编译器的标准C++库。
Microsoft的MSVC STL:Visual C++编译器的C++标准库。

解决方法:main和被链接的库和对方使用的c++标准库同步。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 07:42:01       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 07:42:01       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 07:42:01       57 阅读
  4. Python语言-面向对象

    2024-07-12 07:42:01       68 阅读

热门阅读

  1. promise中reject和catch处理上有什么区别

    2024-07-12 07:42:01       22 阅读
  2. [AHK V2]SQLite测试用例

    2024-07-12 07:42:01       25 阅读
  3. Python实现图像添加水印的方法

    2024-07-12 07:42:01       22 阅读
  4. Elasticsearch集群-实现自动补全

    2024-07-12 07:42:01       27 阅读
  5. Spring依赖注入、循环依赖——三级缓存

    2024-07-12 07:42:01       30 阅读
  6. 【WPF】Enum与Converter的使用

    2024-07-12 07:42:01       24 阅读
  7. 【CH32V305FBP6】USBD 初始化分析

    2024-07-12 07:42:01       26 阅读
  8. Ansible的Playbook

    2024-07-12 07:42:01       24 阅读
  9. Ansible

    2024-07-12 07:42:01       22 阅读