架构i386的未定义符号:

mac*_*ard 5 c++ macos terminal linker g++

我最近搬到了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;

}
Run Code Online (Sandbox Code Playgroud)

我的错误是架构x86_64的未定义符号:"Matrix :: Matrix()",引用自:ccBWK2wB中的_main.l ld:找不到架构x86_64的符号collect2:ld返回1退出状态

我的主要代码有

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

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

和通常一样

小智 7

看起来你有三个文件:

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

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

一种简单的方法是在您的g++clang++调用中指定它们.例如:

clang++ matrix.cpp main.cpp -o programName
Run Code Online (Sandbox Code Playgroud)

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

g++ matrix.cpp main.cpp -o programName
Run Code Online (Sandbox Code Playgroud)