未定义的引用`std :: ios_base :: Init :: Init()'

时间:2012-06-05 23:15:12

标签: c matrix coredump

我写这段代码来读取3个文件,TM是方阵的大小,LER是一个数组的行数,而且从最后一个值定义了一个非方矩阵(ler / 2)* 2

然后......代码读取一个带有某种关系的文件,都是数字并分配给C [ler]。

然后...... C [ler]被分配给B [ler / 2] [2]。

B [ler / 2] [2]中每行的那些坐标分配给a和b。

a和b是矩阵A [tm] [tm]的行和列,其中加1。

我的代码崩溃,我看不出错误是什么。

当我尝试编译它时,编译器 gcc -g -o MatSim MatSim.cpp 提示:

/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/4.6/iostream:75: undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

另外,当我尝试编译它时,编译器 f77 -o MatSim MatSim.cpp 提示:

/tmp/cc6ewlkf.o: In function `__static_initialization_and_destruction_0(int, int)':
MatSim.cpp:(.text+0x17ad4a): undefined reference to `std::ios_base::Init::Init()'
MatSim.cpp:(.text+0x17ad4f): undefined reference to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

解决方案

主要问题是库问题,使用以下代码编译代码:

 g++ -g -o MatSim MatSim.cpp -lstdc

仍然无法使用?安装库:

sudo apt-get install g++-multilib

3 个答案:

答案 0 :(得分:113)

您可以通过多种方式解决此问题:

  • 使用g++代替gccg++ -g -o MatSim MatSim.cpp
  • 添加-lstdc++gcc -g -o MatSim MatSim.cpp -lstdc++
  • <string.h>替换为<string>

这是链接器问题,而不是编译器问题。 iostream linker error问题涵盖了同样的问题 - 它解释了发生了什么。

答案 1 :(得分:6)

由于缺少库,大多数链接器错误都会发生。

我在我的项目中添加了 libstdc ++。6.dylib - &gt; Targets-&gt; Build Phases-&gt;链接二进制文件库。

在iOS 8.3的Xcode 6.3.2上为我解决了这个问题

干杯!

答案 2 :(得分:0)

g++ 等价于 gcc -xc++ -lstdc++ -shared-libgcc

我在使用 sizeof() 方法时遇到了类似的错误。通过在 gcc 中使用 g++ 或以上标签,代码被编译。