编译错误:x86_64 架构下未定义符号

3
我是一名新手程序员(只有在需要的时候才编码),但我主要从事电视工作。我一直在尝试编译一个我下载的工具(bmdtools)以在OSX上进行编译,因为出于某种原因,我们不允许使用Linux机器。
所以,在安装所有库并链接所需内容后,我运行了“make”命令并收到以下错误信息:
ld: symbol(s) not found for architecture x86_64

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

如果有任何帮助或见解,将不胜感激。谢谢!


这取决于缺少哪些符号,以及你如何解决这个问题。可能是以下几种情况:1)缺少一个或两个库文件;2)忘记链接一个目标文件;3)未定义某个方法或函数;4)通过稍微非标准的编译器设置隐藏了该符号。在提供更多细节之前,没有人知道确切原因。 - undefined
我怎样才能知道我缺少了什么?我没有写这段代码。 - undefined
错误信息会告诉你。 - undefined
这是错误信息:ld: 找不到符号(s) 适用于架构 x86_64clang: 错误: 链接器命令执行失败,退出码为1(使用 -v 查看调用) make: *** [bmdcapture] 错误 1 - undefined
那就问写代码的人吧。只有他们能告诉你应该如何构建它... 你按照 README 的指示安装了 libav10 吗? - undefined
1个回答

4
ld: 找不到x86_64架构的符号(s)。我一直认为这个信息很困惑,因为人们往往会关注消息中“对于x86_64架构”的部分。实际上,问题在于找不到一个符号。那么,实际上这是什么意思呢?
如果我们创建了一个类并声明一个函数,但没有实现该函数的主体,将会出现同样的错误,因为编译/链接过程已经告诉它存在一个函数,但找不到它。
在“symbol(s) not found for architecture x86_64”下面的行通常会标识未找到的内容。
让我们看一个例子:-
class PGGui
{
   public:
       PGGui::PGGui(QObject*)
       {
           DoSomeStuff();
       }

    private:
       DoSomeStuff();
};

enter image description here

这说明一个名为 PGGui 的类声明了一个函数 DoStuff,它被从 PGGui::PGGui(QObject*) 构造函数中引用,但是找不到函数体。
正如您所看到的,仅凭错误消息的第一行并不能帮助太多。您需要阅读错误信息的其余部分,以查看缺失的内容,它可能是函数体,也可能是库或其他对象的包含。
如果您开始尝试理解错误消息,而不是仅在网络上搜索错误并希望别人的问题和解决方案与您的匹配,那么你会发现软件开发更容易些。

谢谢您提供的信息,我追踪了一下,发现需要定义一个变量来存储所有这些内容。非常感谢! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接