2012-09-11 50 views
0

我想在Fedora/gcc上編譯/運行我的程序(在Windows/MSVC上工作正常)。編譯現在好了,鏈接似乎是一個問題。根據症狀和這篇文章undefined reference to `__gxx_personality_sj0,在我看來,問題可能在編譯器/鏈接器拱類型中有一些不匹配。無論如何,我不是專家,所以Fedora上的gcc鏈接器錯誤:undefined reference

  • 我剛剛卸載的一切,我發現使用yum remove
  • yum list | egrep gcc|g++|c++然後跑yum install gcc gcc-c++

注:

  • 你看到下面所有的輸出是完成以上步驟之後。
  • gcc輸出的最後一行是:collect2: ld returned 1 exit status
  • 代碼編譯乾淨,沒有警告/錯誤。
  • 幾乎所有未定義的引用都是在namespace std中的名稱
  • 我只有一個源文件Main.C(和2個頭文件)。

我試過提供所有我能想到的信息,讓我知道如果您需要了解更多信息。

[[email protected] 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 
[[email protected] kash]# 
[[email protected] kash]# gcc -c -std=c++0x Main.cpp 
[[email protected] kash]# echo $? 
0 
[[email protected] kash]# 
[[email protected] kash]# rm Main.o 
[[email protected] kash]# 
[[email protected] 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 
[[email protected]Machine kash]# 

完成GCC輸出這裏:http://pastebin.com/PvycFHQM


[[email protected] 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 
[[email protected] kash]# 
[[email protected] 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 
[[email protected] kash]# 
[[email protected] 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 
[[email protected] kash]# 
[[email protected] kash]# rpm -qa | grep g++ 
[[email protected] kash]# 
[[email protected] 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 
[[email protected] kash]# 
[[email protected] 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 
[[email protected] kash]# rpm -qa | grep -w ld 
[[email protected] kash]# 
[[email protected] 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. 
[[email protected] kash]# 
[[email protected] 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. 

[[email protected] kash]# 

回答

6

不要這樣做:

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

而是執行此操作:

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

還是這樣做,而不是:

gcc Main.cpp -lstdc++ 

底線是:確保你無論是在鏈接階段,使用 「g ++」 或 「-lstdC++」 。您可以在編譯階段使用前端。

+0

該死的....! :-)))) – Kashyap

相關問題