架构 x86_64 的未定义符号:El Capitan [重复]

Posted

技术标签:

【中文标题】架构 x86_64 的未定义符号:El Capitan [重复]【英文标题】:Undefined symbols for architecture x86_64: El Capitan [duplicate] 【发布时间】:2016-01-09 16:35:24 【问题描述】:

我正在使用Mac OSX 10.11 El Capitan

之前我使用的是OSX 10.10。我正在运行 gcc 4.9g++ 4.9 的旧版 OSX。但是在升级到OSX 10.11 之后,所有 C++ 程序都开始编译失败。

然后我在OSX 10.11 中切换回gcc 4.2,我收到以下错误:

Undefined symbols for architecture x86_64:
  "Graph::BFS(int)", referenced from:
      _main in BFS-e06012.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我尝试了所有可用的答案。我尝试运行这些命令:

$ g++ -stdlib=libstdc++ BFS.cc -o BFS
$ g++ -lstdc++ BFS.cc -o BFS
$ gcc -lstdc++ BFS.cc -o BFS
$ g++ BFS.cc

但对我没有任何作用。

当我在 shell 上触发 gcc --version 时。我得到了这个:

gcc --version
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin15.2.0
Thread model: posix

我尝试运行的程序是BFS.cc,如下:

/*
* Algo: BFS
*/
#include <iostream>
#include <list>

using namespace std;

class Graph 
    int V;
    list<int> *adj;

    public:
        Graph(int V);
        void addEdge( int v, int w);
        void BFS(int s);
;

Graph::Graph(int V) 
    this->V = V;
    adj = new list<int> [V];


void Graph::addEdge(int v, int w) 
    adj[v].push_back(w);


int main(int argc, char const *argv[]) 
    Graph g(4);
    g.addEdge(0, 1);
    g.addEdge(0, 2);
    g.addEdge(1, 2);
    g.addEdge(2, 0);
    g.addEdge(2, 3);
    g.addEdge(3, 3);

    cout << "Following is Breadth First Traversal (starting from vertex 2) \n";
    g.BFS(2);
    return 0;

谁能帮我解决这个问题?

【问题讨论】:

【参考方案1】:

在您的代码中,您缺少 Graph::BFS(int) 实现,但它是在类定义中定义的:

void BFS(int s);

如果你不使用这个方法,这甚至可以工作(它将被优化器删除),但是,你在你的代码中使用它并且这个方法没有实现。

所以这不是操作系统/编译器错误,而是您自己的错误。更重要的是 - 此代码之前甚至无法链接,因此您可能已经更改它。

【讨论】:

实施就在那里。我错过了复制它。 那就是另一个问题了。您必须检查两次您发布的内容,现在是否可以通过更正重新打开此问题。

以上是关于架构 x86_64 的未定义符号:El Capitan [重复]的主要内容,如果未能解决你的问题,请参考以下文章

架构 x86_64 / i386 的未定义符号

Quickblox:架构 x86_64 的未定义符号:错误

GoogleMapsSDK:架构 x86_64 的未定义符号

Cordova - 架构 x86_64 的未定义符号

架构 x86_64 的未定义符号:MqtUtil

切换到调试时架构 x86_64 的未定义符号