【问题标题】:Make Error: Undefined symbols for architecture x86_64出错:架构 x86_64 的未定义符号
【发布时间】:2016-02-02 23:54:53
【问题描述】:

我是一个相当新手的程序员(因为我只在需要时才编码),但我主要在电视工作。我一直在尝试编译我下载的工具(bmdtools) 用于在 OSX 上编译,因为我们(无论出于何种原因)不允许使用 Linux 机器。

所以,在安装完所有库并链接我需要的内容后,我运行“make”并收到错误消息:

ld: symbol(s) not found for architecture x86_64

然后我读到添加 -stdlib=libc++ 将解决所反映的任何问题。这次它完成了,创建了应该创建的所有三个文件。但是,这三个文件是完全空白的。零字节。

任何帮助或见解将不胜感激。谢谢!

【问题讨论】:

  • 这取决于您将如何解决问题。您可能是 1) 缺少一两个库。 2) 忘记链接目标文件。 3) 未能定义方法或函数。 4)通过稍微不标准的编译器设置隐藏了符号。在您提供更多详细信息之前,没有人知道。
  • 我怎样才能知道我错过了什么?这段代码不是我写的。
  • 错误信息会告诉你的。
  • 这是错误信息:ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [ bmdcapture] 错误 1
  • 然后问写代码的人。只有他们可以告诉您应该如何构建它...您是否按照 README 的指示安装了 libav10?

标签: c++ macos makefile x86-64


【解决方案1】:

ld:未找到架构 x86_64 的符号

我一直认为这条消息令人困惑,因为人们倾向于关注消息中的“for architecture x86_64”部分。这里的实际问题是找不到符号。那么,实际上,这意味着什么?

如果我们创建了一个类并声明了一个函数,但没有实现该函数的主体,则会出现同样的错误,因为编译/链接器进程已被告知一个函数存在,但找不到它。

未找到架构 x86_4 的符号下方的行通常会标识未找到的内容。

我们来看一个例子:-

class PGGui
{
   public:
       PGGui::PGGui(QObject*)
       {
           DoSomeStuff();
       }

    private:
       DoSomeStuff();
};

这告诉我们一个类PGGui已经声明了一个函数DoStuff,它被PGGui构造函数引用:PGGui::PGGui(QObject*),但是找不到函数体。

如您所见,在这里,仅查看错误消息的第一行并没有多大帮助。您需要阅读错误的其余部分以查看缺少的内容,这可能是函数的主体,或者包含库或其他对象。

如果您从尝试理解错误消息开始,而不是简单地在网上搜索错误并希望其他人的问题和解决方案与您自己的匹配,那么您会发现软件开发更容易。

【讨论】:

  • 感谢您提供的信息,我追溯了它,我需要定义一个变量来找到所有这些信息。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 2012-07-20
  • 1970-01-01
相关资源
最近更新 更多