我正在尝试运行一个依赖于boost文件系统库的Qt项目。
Qt version: 5.6
Mac OSX 10.12
Xcode version: 8.0
Boost: 1.54当我试图构建这个项目时,我会得到以下错误,
"typeinfo for std::codecvt<wchar_t, char, __mbstate_t>", referenced from:
typeinfo for boost::filesystem::detail::utf8_codecvt_facet in libboost_filesystem-mt.a(utf8_codecvt_facet.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)我看过堆栈溢出上的许多线程(1、2、3),但它们似乎都解决不了我的问题。
我的.pro文件有以下语句
macx:INCLUDEPATH += ../../boost_1_54_0
macx:LIBPATH += ../../boost_1_54_0
macx:LIBS += -lboost_filesystem-mt -lboost_system-mt -larchive -lz我在构建目录中有boost文件系统、boost-system、lib归档、libz的静态文件。
我该如何解决这个问题?
发布于 2016-10-28 08:00:36
听起来你是在用libc++和libstdc++的混合方式来构建。您需要使用标志-stdlib=stdc++编译您的产品。
虽然我建议将整个编译路径更改为只使用默认的stdlib (
libc++),以避免出现这种情况
libstdc++有以下内容:
$ nm /usr/lib/libstdc++.6.0.9.dylib | c++filt | grep 'std::codecvt<wchar_t, char, __mbstate_t>' | grep typeinfo
0000000000051710 S typeinfo for std::codecvt<wchar_t, char, __mbstate_t>
000000000004b760 S typeinfo name for std::codecvt<wchar_t, char, __mbstate_t>而libc++有以下内容:
$ nm /usr/lib/libc++.dylib | c++filt | grep '::codecvt<wchar_t' | grep typeinfo
0000000000057ff0 S typeinfo for std::__1::codecvt<wchar_t, char, __mbstate_t>
0000000000052070 S typeinfo name for std::__1::codecvt<wchar_t, char, __mbstate_t>注意中间的::__1::,它旨在防止libc++和libstdc++交互悄然中断应用程序。
https://stackoverflow.com/questions/40299796
复制相似问题