MAC OS X 10.8上的gcc 4.8抛出"架构x86_64的未定义符号:"

use*_*840 34 gcc

所有,我在我的mac os x 10.8中编写了这样的代码,当我使用"gcc use_new.cpp -o use_new"来编译它时,它会抛出错误的消息,如下所示:

Undefined symbols for architecture x86_64:
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> >& (*)(std::basic_ostream<char, std::char_traits<char> >&))", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(void const*)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(double)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(int)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >::operator<<(unsigned long)", referenced from:
      _main in ccr2vrRQ.o
  "std::ios_base::Init::Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
  "std::ios_base::Init::~Init()", referenced from:
      __static_initialization_and_destruction_0(int, int) in ccr2vrRQ.o
  "std::cout", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      _main in ccr2vrRQ.o
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      _main in ccr2vrRQ.o
  "operator delete(void*)", referenced from:
      _main in ccr2vrRQ.o
  "operator new(unsigned long)", referenced from:
      _main in ccr2vrRQ.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

当我使用"g ++ use_new.cpp -o use_new"时,谁可以帮助我!?谢谢!

#include <iostream>      
    struct fish              
    {
        float weight;
        int id;
        int kind;              
    };
    int main()               
    {
      using namespace std;   
      int* pt = new int;     
      *pt = 1001;            
      cout<<"int: "<<*pt<<"in location: "<<pt<<endl;
      double* pd = new double;
      *pd = 100000001.0;     
      cout<<"double: "<<*pd<<"in location: "<<pd<<endl;
      cout<<"int point pt is length "<<sizeof(*pt)<<endl;
      cout<<"double point pd is length "<<sizeof(*pd)<<endl;
      delete pt;             
      delete pd;             
      cout<<(int *)"How are you!"<<endl;
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

小智 83

即使使用旧的4.2 GCC也是如此(我在设置非官方iOS工具链时经历过这种情况).gcc默认情况下假定为C,并调用链接器而不链接到C++标准库; 相反,g++默认情况下,假设C++和C++标准库的链接.

总而言之 - 可能的解决方案:

gcc myprog.c -o myprog -lstdc++
Run Code Online (Sandbox Code Playgroud)

要么

g++ myprog.c -o myprog
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用“g++”来运行我的程序,但仍然收到“架构 x86_64 的未定义符号” (3认同)

amd*_*mdn 10

这个stackoverflow问题的答案有答案

gcc和g ++链接器

使用

gcc -lstdc++ use_new.cpp -o use_new
Run Code Online (Sandbox Code Playgroud)

-lstdc++标志告诉链接器包含C++标准库

http://en.wikipedia.org/wiki/C%2B%2B_Standard_Library

我正在运行Mac OS X 10.7.4,库位于此处

/usr/lib/libstdc++.dylib
Run Code Online (Sandbox Code Playgroud)


小智 5

这与@user1582840 粘贴的代码无关,只是我的 2 美分,以及在处理我自己的一些代码时在 g++ 中出现相同问题的不同原因:

由于其他原因,我在 OS X 10.8/Darwin11 上使用 g++ 4.2.1 时收到“ld: symbol(s) not found for architecture x86_64”错误。希望这将有助于一些搜索谷歌的问题。

我收到这个错误是因为我定义了一个类,在类定义中我声明了成员函数。但是,当我定义成员函数时,我忘记包含类修饰符。

因此,举一个我正在谈论的示例(代码示例,而不是完整程序):

class NewClass
{
    NewClass(); // default constructor
};
Run Code Online (Sandbox Code Playgroud)

后来,在定义 NewClass() 构造函数(或任何成员函数)时,我只是有:

// don't do this, it will throw that error!!
NewClass()
{
    // do whatever
}
Run Code Online (Sandbox Code Playgroud)

而不是:

// proper way
NewClass::NewClass()
{
    // do whatever
}
Run Code Online (Sandbox Code Playgroud)

这是一个相当简单的错误,幸运的是我在很短的时间内设法抓住了它,但有人很容易错过(尤其是我们新手),关于 gcc/g++ 链接器、XCode 等的解决方案。对此没有任何帮助:P

再次,希望它有帮助!


归档时间:

查看次数:

62445 次

最近记录:

11 年,6 月 前