【发布时间】: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__是保留标识符。
标签: c++ c++11 undefined osx-mavericks symbols