【问题标题】:undefined reference to `std::ios_base::Init::Init()'未定义对 `std::ios_base::Init::Init()' 的引用
【发布时间】:2012-06-10 00:00:10
【问题描述】:

我写这段代码来读取 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

【问题讨论】:

  • 编译器是否报错?你确定你说“编译器给出的退出状态为 1”而不是程序给出的退出状态为 1 是正确的吗?
  • Celeritas,是的,这是我在执行任何编译器后立即收到的 [gcc o f77]
  • 感谢乔纳森·莱弗勒!!!你和 Reinier 启发了我的代码,现在我真的可以前进了!!!

标签: c matrix coredump


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 Reiner... 我尝试了你的建议,我得到了:g++ -g -o MatSim MatSim.cpp -lstdc /usr/bin/ld: 找不到 -lstdc collect2: ld 返回1 个退出状态
  • 如果你选择额外的库选项,那么你应该使用-lstdc++,而不是-lstdc。但是如果你使用g++,那么就不需要添加那个库了。
  • 谢谢雷尼尔!!!!你和 Jonathan Leffler 启发了我的代码,现在我真的可以继续前进了!!!
  • 我认为这是一个人为错误:用 gcc(而不是 g++)编译 c++ 代码是不对的(因为我自己做错了,在这里搜索了 :)
  • 我尝试 ndk-build 到 jni 目录。我认为您对一个 .cpp 的回答不是目录。你有解决方案吗?
【解决方案2】:

大多数链接器错误是由于缺少库而发生的。

我在我的 Project->Targets->Build Phases-> Link Binary With Libraries 中添加了 libstdc++.6.dylib

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

干杯!

【讨论】:

  • 谢谢分享这个,伙计。你刚刚解决了我的问题。我正在尝试使用 gtest-1.7.0 框架和 Xcode 版本 6.3.2 在我的项目中编译统一测试的目标。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2015-05-11
    • 1970-01-01
    • 2021-06-09
    • 2015-02-09
    相关资源
    最近更新 更多