c++ - 如何安装相关的 C++ 库以避免链接器命令失败?
问题描述
我最近尝试编译一个 C++ 程序,但发现它给出了这个错误:
Undefined symbols for architecture x86_64:
"std::__1::locale::use_facet(std::__1::locale::id&) const", referenced from:
std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in test-c64d7d.o
"std::__1::ios_base::getloc() const", referenced from:
std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in test-c64d7d.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(unsigned long, char)", referenced from:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::basic_string(unsigned long, char) in test-c64d7d.o
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-c64d7d.o
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
"std::__1::cout", referenced from:
_main in test-c64d7d.o
"std::__1::ctype<char>::id", referenced from:
std::__1::ctype<char> const& std::__1::use_facet<std::__1::ctype<char> >(std::__1::locale const&) in test-c64d7d.o
"std::__1::locale::~locale()", referenced from:
std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in test-c64d7d.o
"std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
"std::__1::ios_base::clear(unsigned int)", referenced from:
std::__1::ios_base::setstate(unsigned int) in test-c64d7d.o
"std::terminate()", referenced from:
___clang_call_terminate in test-c64d7d.o
"___cxa_begin_catch", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
___clang_call_terminate in test-c64d7d.o
"___cxa_call_unexpected", referenced from:
std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::ostreambuf_iterator(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c64d7d.o
"___cxa_end_catch", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
"___gxx_personality_v0", referenced from:
std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::__put_character_sequence<char, std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*, unsigned long) in test-c64d7d.o
std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> > std::__1::__pad_and_output<char, std::__1::char_traits<char> >(std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >, char const*, char const*, char const*, std::__1::ios_base&, char) in test-c64d7d.o
std::__1::ostreambuf_iterator<char, std::__1::char_traits<char> >::ostreambuf_iterator(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in test-c64d7d.o
std::__1::basic_ios<char, std::__1::char_traits<char> >::widen(char) const in test-c64d7d.o
Dwarf Exception Unwind Info (__eh_frame) in test-c64d7d.o
ld: symbol(s) not found for architecture x86_64
仅当我使用遵循 std:: 的函数时才会出现问题
#include<iostream>
int main()
{
std::cout<<"hello\n";
}
但是,当我编写常规的 C 风格程序时没有错误。
这是因为缺少某些库还是在不同的路径中?如果是这样,我该如何添加它?
解决方案
欢迎来到堆栈溢出!
问题是您使用了错误的编译器。使用名为 的 C++ 编译器g++
,而不是gcc
. 使用我提到的那个将设置链接器以链接到 C++ 库。
您可以使用 C 语言编写代码,因为您使用的是gcc
orcc
编译器。
运行gcc foo.cpp
会将其编译为 C++ 源代码(由于文件名),但仍仅与 C 库链接。 g++ foo.cpp
将编译为 C++ 并与定义 iostream 函数的 C++ 库链接。
推荐阅读
- anaconda - 无法使用“c:\users\hp\anaconda3\python.exe”创建进程
- swiftui - 将 SFSymbol 添加到 VStack 会创建奇数间距
- java - Java中的2个比较器类
- xcode - 由于 Xcodebuild,每个命令的终端都停止
- google-apps-script - 满足某些条件时如何使用 GmailApp.Sendemail?
- python - imshow() 没有正确显示图像
- jquery - 在 Bootstrap 模式 .NET Core 3.1 C# 中返回 ViewComponent
- typescript - 如何在 typescript 中定义返回字符串或对象的函数?
- javascript - ngFor 在数组中仅返回 1 项时不显示
- python - Discord bot,我如何为您提到的用户分配角色?