【问题标题】:Compiles error:Undefined reference, which is caused mainly by dependency with libraries?编译错误:未定义的引用,主要是与库的依赖引起的?
【发布时间】:2021-11-19 06:10:07
【问题描述】:

我遇到了一个 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++版本??

【问题讨论】:

  • @Ken White 这个链接的信息太笼统了。我知道多种未定义引用的方式,包括我今天问的这种方式。但我只是链接了底部库,输出信息似乎告诉我我没有。我也试了别人的编译程序同样的情况,但是还是报错,终于让人怀疑g++版本了。
  • 不,不是。这个网站不是为每一个问题提供个人的、具体的信息。那是不可能的。您有责任从该帖子中获取信息并弄清楚如何将其应用于您的具体情况。
  • 坦率地说,我认为我的案例不属于上述链接之一......

标签: c++ compiler-errors g++ undefined-reference


【解决方案1】:

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

【讨论】:

  • 谢谢!!!!我从来没想过名字冲突!!这个问题差点让我发疯!!但是我还是有问题。既然我已经指定了搜索库的目录(-L.)。为什么g++仍然使用/usr/lib中的libc.so,而不是我制作的那个?搜索顺序是什么?
  • 永远不会使用标准的导致原始问题。不能链接两个同名的库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
相关资源
最近更新 更多