编译时 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。
所以我正在学习大学编程课程的介绍,在此之前,让我对格式不佳表示歉意,我不知道如何正确格式化它。但回到我的问题,我们主要使用 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。