编译错误:未定义的引用,这主要是由于对库的依赖性引起的?

Compiles error:Undefined reference, which is caused mainly by dependency with libraries?

提问人:caiyi.zcy 提问时间:9/27/2021 更新时间:9/27/2021 访问量:1009

问:

我遇到了一个 c++ 编译错误,这些天几乎让我发疯。输出信息为 (/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o:对符号“__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. 

此外,我尝试了很多方法来解决这个问题。没有一个奏效。而且我发现在第一个步骤中,如果我不链接库 c,输出是一样的。看来最后没能链接c,但还是做了,谁知道原因呢。g++ 版本??

C 编译器错误 G++ 未定义引用

评论

0赞 Ken White 9/27/2021
这回答了你的问题吗?什么是未定义的引用/未解析的外部符号错误,如何解决?
0赞 caiyi.zcy 9/27/2021
@Ken 白色 此链接的信息过于笼统。我知道多种未定义引用的方法,包括我今天问的这个。但我只是链接了底部库,输出信息似乎告诉我我没有。我也尝试过其他人的同情况编译过程,但是还是出现了错误,最后对g++版本产生了疑问。
0赞 Ken White 9/27/2021
不,不是。本网站并非旨在为每个问题提供单独的特定信息。那是不可能的。您有责任从该帖子中获取信息,并弄清楚如何将其应用于您的具体情况。
0赞 caiyi.zcy 9/27/2021
坦率地说,我不认为我的情况属于上述链接之一......

答:

0赞 nhatnq 9/27/2021 #1

您与 安装的冲突。您需要更改以使用其他名称libc.soglibc

评论

0赞 caiyi.zcy 9/27/2021
谢谢!!!!我从没想过这个名字会冲突!!这个问题几乎让我发疯!!I我仍然有问题。由于我已经分配了搜索库的目录(-L.)。为什么 g++ 仍然使用 /usr/lib 中的 libc.so,而不是我生成的那个?搜索顺序是怎样的?
0赞 nhatnq 9/27/2021
标准的永远不会被使用,导致原始问题。不能链接具有相同名称的两个库