所以我正在大学编程课程的介绍中,在其他任何事情之前,让我为糟糕的格式化表示抱歉,我不知道如何正确地格式化。但回到我的问题,所以我们主要使用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查看调用)
感谢您的帮助。
答案 0 :(得分:2)
如果您只运行g++ main.cpp
,则不打算编译helpers.cpp。将helpers.cpp添加到命令行。