Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
在Windows 7上将boost log 1_60与MinGw链接时出现问题_Windows_Gcc_Boost_Boost Log - Fatal编程技术网

在Windows 7上将boost log 1_60与MinGw链接时出现问题

在Windows 7上将boost log 1_60与MinGw链接时出现问题,windows,gcc,boost,boost-log,Windows,Gcc,Boost,Boost Log,升级到Windows 7上使用MinGw 4.9.2构建时,某些应用程序无法链接到 我收到以下链接器错误: undefined reference to `_imp___ZN5boost3log9v2_mt_nt67trivial6logger3getEv' undefined reference to `_imp___ZN5boost3log9v2_mt_nt63aux15stream_providerIcE17allocate_compoundERNS1_6recordE' undefine

升级到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]'
注:BOOST_LOG_DYN_链接定义如下:

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
boost 1.60.0构建日志文件显示,boost log和boost log_安装程序在构建时均未出现任何错误或警告,包括一些无法链接的文件,例如:

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   
应用程序在Windows 7上使用boost 1.59.0与MinGw 4.9.2链接OK,在Fedora 23上使用boost 1.60.0与gcc 5.1.1链接OK


自boost 1.58.0以来没有任何变化。那么,boost 1.59.0和boost 1.60.0之间发生了什么变化,导致MinGw链接在Windows上失败呢?

boost.Log可能是使用不同于您的应用程序的选项构建的,因此它具有不同的版本名称空间。使用查看导出的符号,并查看。我怀疑,不同之处在于名称空间的OS API组件,正如目标Windows版本在1.60中的设置一样。您正在为Windows 7构建应用程序,而Boost.Log很可能是为Windows XP构建的


识别差异时,必须更正Boost构建选项并重建Boost。例如,要将目标Windows版本设置为7,请使用WINAPI版本将其定义为
0x0601
。如果您不想更改Boost的目标Windows版本,您可以在构建应用程序时将
Boost\u USE\u WINAPI\u version
定义为
0x0501
,这表示您希望Boost继续以XP为目标,即使您的应用程序以7为目标。

谢谢@andrey,“Dependency Walker”显示版本为
\u ZN5boost3log9v2\u mt\u nt54core3getEv
,设置
BOOST\u USE\u WINAPI\u version=0x0501
修复了构建。首先感谢您创建了这么一个伟大的图书馆。我想在构建BOOST时设置
BOOST\u USE\u WINAPI\u VERSION=0x601
,但应该如何设置呢?我可以在“boost/detail/winapi/config.hpp”中设置它,但我不想编辑您的文件。我可以同时将宏传递给b2吗?您可以使用指定其他宏的相同方式来执行此操作-将
define=BOOST\u USE\u WINAPI\u VERSION=0x0601
添加到b2命令行。我尝试了添加
define=BOOST\u USE\u WINAPI\u VERSION=0x0601
BOOST\u USE\u WINAPI\u VERSION
的一些其他组合,但没有为我工作。编译
chrono
失败,因为未声明
GetTickCount64
。从您在
boost/detail/winapi/config.hpp
中的评论中,我可以看出问题在于我使用的是
MinGw
(来自QtCreator)而不是
MinGw64
:只有
GetTickCount
winbase.h
中定义,所以我一直坚持设置
BOOST\u USE\u WINAPI\u VERSION=0x0501
,直到
MinGw
更新为止。。。谢谢你的帮助。