编译时 x86_64 的未定义符号

Undefined symbols for x86_64 when compiling

所以我正在学习大学编程课程的介绍,在此之前,让我对格式不佳表示歉意,我不知道如何正确格式化它。但回到我的问题,我们主要使用 C++,但在编译文件时遇到了一些问题。编译器大部分工作,当我的代码有错误时它会告诉我,但是一旦我解决了这些错误,它就会给我一条消息,说我的 x86_64 架构有未定义的符号。
我试着查了一下,发现有些东西说 Mac(我是 运行 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++ 编译它时,我收到以下消息:

Undefined symbols for architecture x86_64: "hello(int, std::__1::basic_string, std::__1::allocator >)", referenced from: _main in main-88f880.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++ main.cpp -stdlib=libstdc++" 在 g++ 中编译它时,我得到了相同的消息。我尝试用 clang 编译它,但我收到了一条更长的消息:

"hello(int, std::string)", referenced from: _main in main-2806e5.o "std::allocator::allocator()", referenced from: _main in main-2806e5.o "std::allocator::~allocator()", referenced from: _main in main-2806e5.o "std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&)", referenced from: _main in main-2806e5.o "std::basic_string, std::allocator >::basic_string(std::string const&)", referenced from: _main in main-2806e5.o "std::basic_string, std::allocator >::~basic_string()", referenced from: _main in main-2806e5.o "std::ios_base::Init::Init()", referenced from: ___cxx_global_var_init in main-2806e5.o "std::ios_base::Init::~Init()", referenced from: ___cxx_global_var_init in main-2806e5.o "std::terminate()", referenced from: ___clang_call_terminate in main-2806e5.o "___cxa_begin_catch", referenced from: ___clang_call_terminate in main-2806e5.o "___gxx_personality_v0", referenced from: _main in main-2806e5.o Dwarf Exception Unwind Info (__eh_frame) in main-2806e5.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++ main.cpp,你不会编译 helpers.cpp。在命令行中添加 helpers.cpp。