我最近搬到了Mac,并且在使用命令行编译器时很挣扎。我正在使用g++进行编译,因此可以很好地构建单个源文件。如果尝试添加自定义头文件,则在尝试使用g++进行编译时,会得到体系结构i386的 undefined symbol 。程序可以在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的 undefined symbol :
从以下位置引用的“Matrix::Matrix()”
_main在ccBWK2wB.o中
ld:找不到架构x86_64的符号
collect2: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++(Apple已有一段时间未更新),并且看来在可预见的将来它们不会使用:
    g++ matrix.cpp main.cpp -o programName
    

    关于c++ - 体系结构i386的 undefined symbol :,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5818270/

    10-13 09:29