c++ - 编译错误:未定义的引用,主要是与库的依赖引起的?
问题描述
我遇到了一个 c++ 编译错误,这些天几乎让我发疯。输出信息为(/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: undefined reference to symbol '__libc_start_main@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libc.so.6:添加符号时出错:命令行中缺少 DSO
要小心,这不是对“main”的未定义引用。)
基本情况非常简单。库 B 依赖于库 C。可执行程序 A 依赖于库 B,因此依赖于库 C。下面是我的代码,它也很简单。
**c.h**
void kk();
**c.cpp**
#include <iostream>
using namespace std;
void kk()
{
cout<<"111"<<endl;
}
**b.h**
#include "c.h"
void pp();
**b.cpp**
#include "b.h"
void pp()
{
kk();
}
**a.cpp**
#include "b.h"
int main()
{
pp();
}
这是我的编译过程:分别使 c && b 成为共享库,并通过链接对它们进行构建。
1. g++ -fpic -shared c.cpp -o libc.so
2. g++ -fpic -shared b.cpp -o libb.so
3. g++ a.cpp -o a -lb -lc -L.
此外,我尝试了很多方法来解决这个问题。没有工作。而且我发现在fianl这一步,如果不链接库c,输出也是一样的 g++版本??
解决方案
您libc.so
与安装的冲突glibc
。您需要更改以使用其他名称
推荐阅读
- angular - 奇怪的 *ngFor 问题
- javascript - 如何让浏览器在发起跨域HTTP请求时包含主机源域的cookies
- angular - 父 li 上的单击侦听器还注册了对子 ul li 子菜单的单击
- python - 如何在只读模式下设置输入的值
- flask - 在 anaconda Prompt 上运行 FLASK 时出错
- java - 如何在终端中使用 .jar 文件?
- debugging - 如何自己重写烧瓶调试重新加载规则?
- sql - 使用 *typed* XML 从父节点读取属性时出现 XQuery 错误(value() 需要单例)
- cassandra - 节点工具修复命令是修复集群中的所有节点还是修复执行命令的单个节点?
- java - Log4j2 中是否使用了 java 本机内存?我发现许多登录本机内存而不是堆