架构i386未定义的符号:

问题描述:

我最近移到了mac,并且正在使用命令行编译器挣扎。我正在使用g ++进行编译,并且这可以生成单个源文件。如果我尝试添加自定义头文件,当我尝试使用g ++进行编译时,我得到了架构i386的未定义符号。然而,程序在xCode中编译得很好。我错过了明显的东西吗?架构i386未定义的符号:

尝试使用g ++ -m32 main.cpp ...不知道还有什么可以尝试的。


好的,旧代码编译...已经缩小到我的构造函数。

class Matrix{ 
public: 
    int a; 
    int deter; 

    Matrix(); 
    int det(); 
}; 

#include "matrix.h" 


Matrix::Matrix(){ 
    a = 0; 
    deter = 0; 
} 

int Matrix::det(){ 
    return 0; 

} 

我的错误是建筑x86_64的 未定义的符号: “)矩阵::矩阵(” ,从引用:找不到架构x86_64的 collect2符号(S):在ccBWK2wB.o _main LD :LD返回1个退出状态

我主要的代码有

#include "matrix.h" 
int main(){ 
    Matrix m; 

    return 0; 
} 

与平时

沿
+6

考虑编辑问题,包括你的代码,头文件,命令行调用。 – 2011-04-28 12:05:15

+0

,当然还有相应的输出;) – geekazoid 2011-04-28 18:51:51

+0

要明确一点,您正在尝试构建哪种架构?它是x86_64吗? – Troubadour 2011-04-28 23:47:45

看起来你已经得到了三个文件:

  • matrix.h,该声明Matrix类头文件;
  • matrix.cpp,实现Matrix方法的源文件;
  • main.cpp,一个定义main()并使用Matrix类的源文件。

为了生成带有所有符号的可执行文件,需要编译两个.cpp文件并将它们链接在一起。

执行此操作的简单方法是在g++clang++调用中指定它们。例如:

clang++ matrix.cpp main.cpp -o programName 

,或者,如果你喜欢使用g++ - 苹果公司已经有一段时间没有更新,它看起来像他们不会在可预见的未来:

g++ matrix.cpp main.cpp -o programName 
+0

完美。我的问题是我没有在我的命令行中包含两个源文件。我没有意识到我必须这样做。 谢谢! – maccard 2011-04-29 11:10:29

+0

我一直在寻找这个解决方案。谢谢。 – Nate711 2013-08-05 04:57:49

你真的在某处定义了Box构造函数吗? (如Line.cpp)

+0

并且在构造函数声明之后缺少';'。 – RedX 2011-04-28 13:52:55

+0

构造函数已定义。代码在XCode中编译。不,有;在该行结尾处,这只是一种类型的抱歉。 – maccard 2011-04-28 18:46:13

+1

,你也在命令行中包含了Matrix.cpp,对吧? – 2011-04-29 01:37:00

是不是这里的情况,但它可能恰好是你忘了把类名::

例如:


一个很好的格式:

foo.h中

class Foo{ 
public: 
    Foo(); 
    void say(); 
private: 
    int x; 
}; 

FOO。CPP

Foo::Foo(){ 
    this->x = 1; 
} 

void Foo::say(){ 
    printf("I said!\n"); 
} 

格式错误

foo.h中

class Foo{ 
public: 
    Foo(); 
    void say(); 
private: 
    int x; 
} 

Foo.cpp中

Foo::Foo(){ 
    this->x = 1; 
} 

//I always mistake here because I forget to put the class name with :: and the xcode don't show this error. 
void say(){ 
    printf("I said!\n"); 
} 
+0

哇,这一个为我做了.. 我会说从我身边没有足够的C++经验。我认为这个问题是与Xcode。但是,不,这是我的错误。现在要小心了。 – 2am 2013-09-22 06:18:20

+0

完美的解释。谢谢。 – 2014-08-18 16:02:54