架构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;
}
与平时
沿
看起来你已经得到了三个文件:
- 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
是不是这里的情况,但它可能恰好是你忘了把类名::
例如:
一个很好的格式:
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");
}
哇,这一个为我做了.. 我会说从我身边没有足够的C++经验。我认为这个问题是与Xcode。但是,不,这是我的错误。现在要小心了。 – 2am 2013-09-22 06:18:20
完美的解释。谢谢。 – 2014-08-18 16:02:54
考虑编辑问题,包括你的代码,头文件,命令行调用。 – 2011-04-28 12:05:15
,当然还有相应的输出;) – geekazoid 2011-04-28 18:51:51
要明确一点,您正在尝试构建哪种架构?它是x86_64吗? – Troubadour 2011-04-28 23:47:45