gpt4 book ai didi

c++ - 编译时 x86_64 的 undefined symbol

转载 作者:行者123 更新时间:2023-11-28 02:30:25 28 4
gpt4 key购买 nike

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

关于c++ - 编译时 x86_64 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156706/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com