ken*_*nba 4 windows gcc boost boost-log
在升级到升级1.60.0时,某些应用程序在Windows 7上使用MinGw 4.9.2构建时无法与升级日志链接.
我收到以下链接器错误:
undefined reference to `_imp___ZN5boost3log9v2_mt_nt67trivial6logger3getEv'
undefined reference to `_imp___ZN5boost3log9v2_mt_nt63aux15stream_providerIcE17allocate_compoundERNS1_6recordE'
undefined reference to `_imp___ZN5boost3log9v2_mt_nt63aux25unhandled_exception_countEv'
undefined reference to `_imp___ZN5boost3log9v2_mt_nt611record_view11public_data7destroyEPKS3_'
bad reloc address 0x1 in section `.text$_ZNK5boost4asio5error6detail13misc_category4nameEv[__ZNK5boost4asio5error6detail13misc_category4nameEv]'
Run Code Online (Sandbox Code Playgroud)
注意:BOOST_LOG_DYN_LINK定义为:
g++ -c -pipe -fno-keep-inline-dllexport -Wall -Wextra -Wpedantic -Ofast -std=c++1y -frtti -fexceptions -mthreads -DUNICODE -DLOGGING_ENABLED -DNTDDI_VERSION=NTDDI_WIN7 -D_WIN32_WINNT=_WIN32_WINNT_WIN7 -DBOOST_THREAD_USE_LIB=1 -DBOOST_LOG_DYN_LINK=1
Run Code Online (Sandbox Code Playgroud)
boost 1.60.0构建日志文件显示boost log和boost log_setup都没有任何错误或警告,包括一些无法链接的文件,例如:
gcc.compile.c++ bin.v2\libs\log\build\gcc-mingw-4.9.2\release\threading-multi\trivial.o
gcc.compile.c++ bin.v2\libs\log\build\gcc-mingw-4.9.2\release\threading-multi\unhandled_exception_count.o
Run Code Online (Sandbox Code Playgroud)
应用程序在Windows 7上使用boost 1.59.0和MinGw 4.9.2链接正常,并在Fedora 23上使用boost 1.60.0和gcc 5.1.1链接OK.
自从提升1.58.0以来,提升asio没有改变.那么在boost 1.59.0和boost 1.60.0之间的boost日志中有什么变化导致MinGw链接在Windows上失败?
Boost.Log可能使用与您的应用程序不同的选项构建,因此它具有不同命名的版本名称空间.使用Dependency Walker查看导出的符号并查看说明.我怀疑,差异将在命名空间的OS API组件中,因为目标Windows版本的设置在1.60中已更改.您正在为Windows 7构建应用程序,而Boost.Log很可能是为Windows XP构建的.
确定差异后,必须更正Boost构建选项并重建Boost.例如,将目标Windows版本设置为7定义BOOST_USE_WINAPI_VERSION
为0x0601
.如果你不想更改Windows版本升压是针对,您可以定义BOOST_USE_WINAPI_VERSION
要0x0501
在构建应用程序,以表明要推动保持针对XP,即使您的应用程序的目标是7.
归档时间: |
|
查看次数: |
1472 次 |
最近记录: |