我正在尝试运行一个依赖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-filesystem,boost-system,lib存档,libz的静态文件]
我该如何解决这个问题?
听起来您正在混合使用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++
交互静默破坏您的应用程序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句