我正在尝试运行一个依赖于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)
我已经查看了堆栈溢出的许多线程(https://firebase.google.com/docs/database/security/,1,2),但它们似乎都没有解决我的问题。
我的.pro文件包含以下语句
macx:INCLUDEPATH += ../../boost_1_54_0
macx:LIBPATH += ../../boost_1_54_0
macx:LIBS += -lboost_filesystem-mt -lboost_system-mt -larchive -lz
[我在构建目录中有boost-filesystem,boost-system,lib archive,libz的静态文件]
如何解决此问题?
答案 0 :(得分:3)
听起来你正在使用libc++
和libstdc++
混合构建。在 guess ,您需要使用标记-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++
互动无法以静默方式破坏您的应用。