Make Error: Undefined symbols for architecture x86_64

Make Error: Undefined symbols for architecture x86_64

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

因此,在安装所有库并链接我需要的内容后,我 运行 "make" 收到错误消息:

ld: symbol(s) not found for architecture x86_64

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

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

ld: symbol(s) not found for architecture x86_64

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

如果我们创建一个 class 并声明一个函数,但不实现该函数的主体,则会出现相同的错误,因为已告知 compilation/linker 进程存在一个函数, 但找不到它。

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

我们来看一个例子:-

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

    private:
       DoSomeStuff();
};

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

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

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