Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
';ld:未找到用于体系结构的符号???';即使它';在那里 我有一个奇怪的问题试图在C++中添加一个对Boost模块的引用。首先,你需要知道我在玩C++游戏,所以也许这是一个我很容易错过的超级新手。p>_C++_Macos_Boost_Linker_G++ - Fatal编程技术网

';ld:未找到用于体系结构的符号???';即使它';在那里 我有一个奇怪的问题试图在C++中添加一个对Boost模块的引用。首先,你需要知道我在玩C++游戏,所以也许这是一个我很容易错过的超级新手。p>

';ld:未找到用于体系结构的符号???';即使它';在那里 我有一个奇怪的问题试图在C++中添加一个对Boost模块的引用。首先,你需要知道我在玩C++游戏,所以也许这是一个我很容易错过的超级新手。p>,c++,macos,boost,linker,g++,C++,Macos,Boost,Linker,G++,这是我的环境,因此您可以获得更多的上下文:MacOSMavericks,MacPorts端口为Boost1.55和g++-mp-4.8。我目前正在链接并使用boost\u system-mt和boost\u filesystem-mt 问题是我在一个正在进行的项目中工作,它一直在使用boost,并且编译得很好。我试图将一个utf8字符串转换为Latin1,因此我加入了boost/locale.hpp,并将-lboost\u locale-mt添加到链接器参数中。对于我正在执行的任务: boost

这是我的环境,因此您可以获得更多的上下文:MacOSMavericks,MacPorts端口为Boost1.55和g++-mp-4.8。我目前正在链接并使用
boost\u system-mt
boost\u filesystem-mt

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

boost::locale::conv::from_utf<char>(value, "Latin1")
此外,我在文件中搜索了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\uuu zn5从\u utficenst3\uuu112basic\u stringcns3\u 11char\u 9allocatoriepekt\u SC\u RKS9\u NS1\u 11type方法中选择本地4 conv8
std::\uuu1::基本字符串boost::locale::conv::from_utf(char const*,char const*,std:\uuu1::基本字符串常量&,boost::locale::conv::method\u type)
所以,到目前为止,我几乎一无所知

你们能帮我找出问题所在吗,或者至少我还能试试别的什么吗


提前感谢。

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


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

\uu 1
确实有意义。这意味着它来自clang的libc++,而不是g++使用的libstdc++。很好的捕获,非常感谢!我还获得了一个EXC_BAD_访问权限,这时引发了一个boost异常。现在我明白为什么了。除了中间那个晦涩难懂的“_1”名称空间之外,将来还有什么办法来检查这个问题吗?
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
$ 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
$ 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 __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)