编译时 x86_64 的未定义符号
Posted
技术标签:
【中文标题】编译时 x86_64 的未定义符号【英文标题】:Undefined symbols for x86_64 when compiling 【发布时间】:2015-05-23 06:46:48 【问题描述】:所以我正在介绍大学的编程课程,在其他任何事情之前,让我对糟糕的格式表示抱歉,我不知道如何正确格式化。但回到我的问题,所以我们主要使用 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);
这是我的助手.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 >)”,引用自: _main 在 main-88f880.o ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
但是,当我使用“g++ main.cpp -stdlib=libstdc++”在 g++ 中编译它时,我得到了相同的消息。我尝试用 clang 编译它,但收到一条更长的消息:
“hello(int, std::string)”,引用自: _main 在 main-2806e5.o “std::allocator::allocator()”,引用自: _main 在 main-2806e5.o “std::allocator::~allocator()”,引用自: _main 在 main-2806e5.o “std::basic_string, std::allocator >::basic_string(char const*, std::allocator const&)”,引用自: _main 在 main-2806e5.o “std::basic_string, std::allocator >::basic_string(std::string const&)”,引用自: _main 在 main-2806e5.o “std::basic_string, std::allocator >::~basic_string()”,引用自: _main 在 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 在 main-2806e5.o main-2806e5.o 中的 Dwarf 异常展开信息 (__eh_frame) ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
感谢您的帮助。
【问题讨论】:
__helpers__
是保留标识符。
【参考方案1】:
如果您只运行g++ main.cpp
,您将不会编译 helpers.cpp。将 helpers.cpp 添加到命令行。
【讨论】:
如果不是,OP 还需要在 helpers.cpp 中#include "helpers.h"
。
@aruisdante,我同意。我还强烈建议在头文件中丢失using namespace std;
。
但这并不能解决问题。我仍然不确定他为什么会收到该错误消息
谢谢,添加 helpers.cpp 有效。我还尝试添加“#include”helpers.h“”,但随后出现编译器错误,但没有它似乎可以工作。感谢您的快速帮助。以上是关于编译时 x86_64 的未定义符号的主要内容,如果未能解决你的问题,请参考以下文章