gpt4 book ai didi

c++ - 'ld : symbol(s) not found for architecture ? ? ?' even when it' 在那里

转载 作者:行者123 更新时间:2023-11-30 04:02:38 42 4
gpt4 key购买 nike

我在尝试在 C++ 中添加对 boost 模块的引用时遇到了这个奇怪的问题。首先,您需要知道我正在玩一些 C++,所以也许这是我错过的 super 简单的菜鸟东西。

这是我的环境,因此您可以获得更多上下文:Mac OS Mavericks,带有 boost 1.55 和 g++-mp-4.8 的 MacPorts 端口。我目前正在链接和使用 boost_system-mtboost_filesystem-mt

问题是我在一个正在进行的项目中工作,它一直在使用 boost 并且编译得很好。我正在尝试将 utf8 字符串转换为 Latin1,因此我包含了 boost/locale.hpp,并添加了 -lboost_locale- mt 到链接器参数。对于我正在做的任务:

boost::locale::conv::from_utf<char>(value, "Latin1")

到目前为止一切顺利,编译正常,但是当应该完成链接时,出现以下错误:

Undefined symbols for architecture x86_64:
"std::basic_string<char, std::char_traits<char>, std::allocator<char> > boost::locale::conv::from_utf<char>(char const*, char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::locale::conv::method_type)", referenced from:
clsByteQueue::WriteUnicodeStringFixed(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in clsByteQueue.o
clsByteQueue::WriteUnicodeString(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in clsByteQueue.o
ld: symbol(s) not found for architecture x86_64

链接器正在使用以下命令运行:

g++-mp-4.8 -fstack-protector -ggdb -o "bin/foobar" <all compiled.o files goes here> -L/opt/local/lib/ -levent -levent_core -levent_extra -lboost_system-mt -lboost_filesystem-mt -lboost_locale-mt

事实是,我检查了 /opt/local/lib/libboost_locale-mt.a 不仅存在,而且针对适当的架构进行了编译:

$ lipo -info /opt/local/lib/libboost_locale-mt.a
input file /opt/local/lib/libboost_locale-mt.a is not a fat file
Non-fat file: /opt/local/lib/libboost_locale-mt.a is architecture: x86_64

此外,我在文件中搜索了 from_utf 并出现了以下符号:

$ otool -tv /opt/local/lib/libboost_locale-mt.a | grep from_utf
__ZN5boost6locale4conv8from_utfIcEENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPKT_SC_RKS9_NS1_11method_typeE:

在使用 c++filt 解开它之后,我可以验证链接器没有找到相同的符号(除非 __1 意味着什么?):

$ c++filt __ZN5boost6locale4conv8from_utfIcEENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPKT_SC_RKS9_NS1_11method_typeE
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > boost::locale::conv::from_utf<char>(char const*, char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, boost::locale::conv::method_type)

所以,我现在几乎一无所知。

你们能帮我找出问题所在吗,或者至少我还可以尝试什么?

提前致谢。

最佳答案

看起来你的 boost::locale 是用 clang 和 libc++ 编译的,这是 Mac OS X 上的默认编译器和标准库,而你的程序是用 g++ 和 libstdc++ 编译的,这是 g++ 的标准库。这两个标准库不是二进制兼容的。

您需要使用 clang 和 libc++ 编译所有内容,或者获取使用 g++ 和 libstdc++ 编译的 boost 版本。

关于c++ - 'ld : symbol(s) not found for architecture ? ? ?' even when it' 在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24966660/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com