c++ - 架构 i386 的 undefined symbol :

标签 c++ macos linker g++ terminal

我最近转向了 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 : “矩阵::矩阵()”,引用自: ccBWK2wB.o 中的_main 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 已经有一段时间没有更新了,而且看起来在可预见的 future 也不会:

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

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

相关文章:

c++ - 当视差图为 CV_8U 类型时访问 OpenCV 中的视差值?

linux - 搜索所有文件和所有文件

c++ - 将 C++ 类及其派生类放在特定部分

windows - DLL 链接器问题

ios - 如何在 iOS 上的嵌入式私有(private)框架和 App 中使用静态库

c++ - 正确的结构内存管理

c# - 检测所有已安装的 SAPI 语音

c++ - 模板中的模板默认参数

c - setjmp/signal 崩溃异常处理

objective-c - NSApplication windows 属性 - windows 未删除?