我最近搬到了mac,并且正在努力使用命令行编译器。我正在使用g ++进行编译,这可以很好地构建单个源文件。如果我尝试添加自定义头文件,当我尝试使用g ++编译时,我会得到架构i386的未定义符号。然而,程序在xCode中编译得很好。我错过了一些明显的东西吗?
尝试使用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的未定义符号: “Matrix :: Matrix()”,引自: _main in ccBWK2wB.o ld:找不到架构x86_64的符号 collect2:ld返回1退出状态
我的主要代码有
#include "matrix.h"
int main(){
Matrix m;
return 0;
}
与通常的
一起答案 0 :(得分:7)
看起来你有三个文件:
Matrix
类; Matrix
方法的源文件; main()
并使用Matrix
类的源文件。为了生成包含所有符号的可执行文件,您需要编译两个.cpp文件并将它们链接在一起。
执行此操作的简便方法是在g++
或clang++
调用中指定它们。例如:
clang++ matrix.cpp main.cpp -o programName
或者,如果您更喜欢使用g++
- Apple暂时没有更新,而且看起来它们在可预见的未来不会出现:
g++ matrix.cpp main.cpp -o programName
答案 1 :(得分:2)
不是这里的情况,但可能恰好是你忘了把类名用::
例如:
良好的格式:
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");
}
答案 2 :(得分:1)
你真的在某处定义了Box构造函数吗? (比如Line.cpp)