【问题标题】:Undefined symbols for architecture i386:架构 i386 的未定义符号:
【发布时间】:2011-08-14 15:59:45
【问题描述】:

我最近搬到了 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 在 ccBWK2wB.o ld:未找到架构 x86_64 的符号 collect2: ld 返回 1 个退出状态

我的主要代码有

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

    return 0;
} 

和往常一样

【问题讨论】:

  • 考虑编辑您的问题以包含您的代码、头文件和命令行调用。
  • 当然还有相应的输出;)
  • 明确一点,您要为哪种架构构建?是 x86_64 吗?

标签: c++ macos linker g++ terminal


【解决方案1】:

看起来你有三个文件:

  • 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

【讨论】:

  • 完美。我的问题是我没有在命令行中包含我的两个源文件。我没有意识到我必须这样做。谢谢!
  • 我一直在寻找这个解决方案。谢谢。
【解决方案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");
}

【讨论】:

  • 哇,这个是为我做的。我想说我的 c++ 经验不够。我认为问题出在 Xcode 上。但不,这是我的错。现在要小心了。
  • 完美解释。谢谢。
【解决方案3】:

您是否真的在某处定义了 Box 构造函数? (如 Line.cpp)

【讨论】:

  • 你在构造函数声明之后缺少;
  • 构造函数已定义。代码在 XCode 中编译。不,有一个;在该行的末尾,这只是一种抱歉。
  • 你也在命令行中包含了 Matrix.cpp,对吧?
  • 不,我没有在命令行中包含 matrix.cpp。谢谢!
猜你喜欢
  • 2011-10-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
相关资源
最近更新 更多