编译时x86_64的未定义符号

时间:2015-03-19 23:18:35

标签: c++ c++11 undefined osx-mavericks symbols

所以我正在大学编程课程的介绍中,在其他任何事情之前,让我为糟糕的格式化表示抱歉,我不知道如何正确地格式化。但回到我的问题,所以我们主要使用c ++,但是当我编译文件时,我遇到了一些问题。编译器大部分工作,它会告诉我当我的代码中有错误但是一旦我解决了这些错误,它会给我一条消息,说明我的x86_64架构有未定义的符号。
我试着查看它并发现一些事情说Macs(我正在运行Mavericks)有时会有冲突的32位和64位库。当我第一次看到这个时,我找到了一些线程,人们说要添加链接器“-stdlib = libstdc ++”,但这不起作用。我在终端使用g ++尝试了这个,但随后我的消息变得更糟。我已将大部分代码简化为使用最少代码弹出错误的位置。

这是我的main.cpp:

    #include <iostream>
    #include "helpers.h"
    #include <string>

    using namespace std;

    int main(){
        int num = 1;
        string y = "hi";
        hello(num, y);
    }

这是我的helpers.h

    #ifndef __helpers__
    #define __helpers__

    #include <string>
    #include <iostream>

    using namespace std;

    void hello(int number, string name);

    #endif

最后这是我的helpers.cpp:

    #include <iostream>

    using namespace std;

    void hello(int number, string name){
    return;
    }

当我用g ++编译它时,我收到以下消息:

  

架构x86_64的未定义符号:     “hello(int,std :: __ 1 :: basic_string,std :: __ 1 :: allocator&gt;)”,引自:         _main in main-88f880.o   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

但是,当我使用“g ++ main.cpp -stdlib = libstdc ++”在g ++中编译它时,我收到相同的消息。我尝试用clang编译它,但我收到了更长的消息:

  

“hello(int,std :: string)”,引自:         _main in main-2806e5.o     “std :: allocator :: allocator()”,引自:         _main in main-2806e5.o     “std :: allocator :: ~allocator()”,引自:         _main in main-2806e5.o     “std :: basic_string,std :: allocator&gt; :: basic_string(char const *,std :: allocator const&amp;)”,引自:         _main in main-2806e5.o     “std :: basic_string,std :: allocator&gt; :: basic_string(std :: string const&amp;)”,引自:         _main in main-2806e5.o     “std :: basic_string,std :: allocator&gt; :: ~basic_string()”,引自:         _main in main-2806e5.o     “std :: ios_base :: Init :: Init()”,引自:         ___cxx_global_var_init在main-2806e5.o中     “std :: ios_base :: Init :: ~Init()”,引自:         ___cxx_global_var_init在main-2806e5.o中     “std :: terminate()”,引自:         ___clang_call_terminate在main-2806e5.o中     “___cxa_begin_catch”,引自:         ___clang_call_terminate在main-2806e5.o中     “___gxx_personality_v0”,引自:         _main in main-2806e5.o         main-2806e5.o中的Dwarf Exception Unwind Info(__eh_frame)   ld:找不到架构x86_64的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您只运行g++ main.cpp,则不打算编译helpers.cpp。将helpers.cpp添加到命令行。