c++ - fedora : undefined reference 上的 gcc 链接器错误

标签 c++ linker fedora

我正在尝试在 Fedora/gcc 上编译/运行我的程序(在 Windows/MSVC 上运行良好)。现在编译很好,链接似乎有问题。根据症状和这篇文章undefined reference to `__gxx_personality_sj0 ,在我看来,问题可能是编译器/链接器架构类型中的某种不匹配。无论如何,我不是专家,所以

  • 我刚刚用 yum list | 卸载了所有发现的东西 | egrep gcc|g++|c++ 使用 yum remove
  • 然后运行 ​​yum install gcc gcc-c++

注意事项:

  • 您在下面看到的所有输出都是在上述步骤之后。
  • gcc 输出的最后一行是:collect2: ld returned 1 exit status
  • 代码编译干净,没有警告/错误。
  • 几乎所有 undefined reference 都是对 namespace std 中的名称
  • 我只有一个源文件 Main.C(和 2 个 header )。

我已尽力提供我能想到的所有信息,如果您需要更多信息,请告诉我。

[root@myTestMachine kash]# ls -Altr
total 44K
-rw-r--r--. 1 root root 3.5K Sep 11 11:34 .bashrc
-rw-r--r--. 1 root root 2.6K Sep 11 13:50 MyCommon.h
-rw-r--r--. 1 root root 3.5K Sep 11 14:01 Main.cpp
-rw-r--r--. 1 root root  26K Sep 11 14:02 sort.h
-rw-r--r--. 1 root root   80 Sep 11 14:26 a.cpp
[root@myTestMachine kash]#
[root@myTestMachine kash]# gcc -c -std=c++0x Main.cpp
[root@myTestMachine kash]# echo $?
0
[root@myTestMachine kash]#
[root@myTestMachine kash]# rm Main.o
[root@myTestMachine kash]#
[root@myTestMachine kash]# gcc -std=c++0x Main.cpp
/tmp/cckR4oL1.o: In function `main::{lambda(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)#1}::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const':
Main.cpp:(.text+0x270): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::c_str() const'

..... LOTS of other such undefined refs; see complete list on pastebin link below .....

Main.cpp:(.text._ZSt10_ConstructISsISsEEvPT_DpOT0_[_ZSt10_ConstructISsISsEEvPT_DpOT0_]+0x37): undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)'
/tmp/cckR4oL1.o:(.eh_frame+0x1cb): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
[root@myTestMachine kash]#

完整的 gcc 输出在这里:http://pastebin.com/PvycFHQM


[root@myTestMachine kash]# uname -a
Linux myTestMachine 3.1.0-7.fc16.i686.PAE #1 SMP Tue Nov 1 20:53:45 UTC 2011 i686 i686 i386 GNU/Linux
[root@myTestMachine kash]#
[root@myTestMachine kash]# yum list gcc gcc-c++
Loaded plugins: langpacks, presto, refresh-packagekit
Installed Packages
gcc.i686                                               4.6.3-2.fc16                                           @updates
gcc-c++.i686                                           4.6.3-2.fc16                                           @updates
[root@myTestMachine kash]#
[root@myTestMachine kash]# rpm -qa | grep gcc
gcc-4.6.3-2.fc16.i686
libgcc-4.6.3-2.fc16.i686
arm-gp2x-linux-gcc-4.1.2-12.fc15.i686
gcc-c++-4.6.3-2.fc16.i686
arm-gp2x-linux-gcc-c++-4.1.2-12.fc15.i686
[root@myTestMachine kash]#
[root@myTestMachine kash]# rpm -qa | grep g++
[root@myTestMachine kash]#
[root@myTestMachine kash]# rpm -qa | grep c++
libsigc++20-2.2.10-1.fc16.i686
libstdc++-devel-4.6.3-2.fc16.i686
libstdc++-4.6.3-2.fc16.i686
gcc-c++-4.6.3-2.fc16.i686
arm-gp2x-linux-gcc-c++-4.1.2-12.fc15.i686
[root@myTestMachine kash]#
[root@myTestMachine kash]# rpm -qa | grep ld
rpm-build-libs-4.9.1.2-1.fc16.i686
libldb-1.1.0-1.fc16.i686
openldap-2.4.26-1.fc16.1.i686
[root@myTestMachine kash]# rpm -qa | grep -w ld
[root@myTestMachine kash]#
[root@myTestMachine kash]# ld -version
GNU ld version 2.21.53.0.1-6.fc16 20110716
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.
[root@myTestMachine kash]#
[root@myTestMachine kash]# gcc --version
gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@myTestMachine kash]#

最佳答案

不要这样做:

gcc -std=c++0x Main.cpp

改为这样做:

g++ -std=c++0x Main.cpp

或者这样做:

gcc Main.cpp -lstdc++

底线是:确保您使用“g++”或“-lstdc++”在链接阶段。您可以在编译阶段使用任一前端。

关于c++ - fedora : undefined reference 上的 gcc 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12376897/

相关文章:

c - 一个用 C 在基于 gnome 的系统上加载 bmp 文件的库

c++ - Qt中如何从txt文件中加载大数据

c - Visual Studio 2008 链接器希望解析所有符号,而不仅仅是使用过的符号

c++ - std::allocator_traits::construct with const 指针

c++ - 无法在运行时找到共享对象。 KRPC

compiler-errors - header 中已定义函数,但链接时出现 undefined reference 错误

linux - Apache 测试页 : how do I get it to come up?

linux - 如何在 Fedora 21 上安装 Plasma 5?

c++ - OpenCV 2.3.1。 cv::Mat 到 std::vector 转换

c++ - 了解 g++ 链接器失败