Mingw32 Boost Log Link Errors: InterlockedCompareE

2019-09-02 08:17发布

问题:

Hi I'm trying to link a Boost Log simple example with mingw32 on Windows 8 and I'm getting link errors:

Log.cpp

#include <boost/log/trivial.hpp>

int main()
{

    BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
    BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
    BOOST_LOG_TRIVIAL(info) << "An informational severity message";
    BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
    BOOST_LOG_TRIVIAL(error) << "An error severity message";
    BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
}

And I'm running the following compile and link command

gcc -Wall -g -static -I./../../boost_1_56_0/ Log.cpp -o Log.exe -L./../../boost_1_56_0/stage/lib/ -lboost_log-mgw48-mt-1_56 -lboost_thread-mgw48-mt-1_56 -lboost_system-mgw48-mt-1_56 -lstdc++

And I'm getting the following errors:

C:\SpellSpindle\GelatinousEngine\BoostHelloWorld\Log>mingw32-make
g++ -Wall -g -static -I./../../boost_1_56_0/ Log.cpp -o Log.exe -L./../../boost_
1_56_0/stage/lib/ -lboost_log-mgw48-mt-1_56 -lboost_thread-mgw48-mt-1_56 -lboost
_system-mgw48-mt-1_56 -lstdc++
./../../boost_1_56_0/stage/lib/\libboost_thread-mgw48-mt-1_56.a(thread.o):thread
.cpp:(.text$_ZN5boost6detail5win3223GetTickCount64emulationEv+0x1e): undefined r
eference to `_InterlockedCompareExchange'
./../../boost_1_56_0/stage/lib/\libboost_thread-mgw48-mt-1_56.a(thread.o):thread
.cpp:(.text$_ZN5boost6detail5win3223GetTickCount64emulationEv+0x77): undefined r
eference to `_InterlockedCompareExchange'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: ./../../bo
ost_1_56_0/stage/lib/\libboost_thread-mgw48-mt-1_56.a(thread.o): bad reloc addre
ss 0x77 in section `.text$_ZN5boost6detail5win3223GetTickCount64emulationEv'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
 failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
Makefile:15: recipe for target 'all' failed
mingw32-make: *** [all] Error 1

I've been trying to get this to link for days and haven't found anything posted on the internet that fix the link errors.

Can anyone help?

回答1:

Stitching together information from different websites:

  • you can’t mix libraries built with MinGW 4.7 and MinGW 4.8 (the OP simply replaced the incompatible 4.7-.dlls with the 4.8 counterparts, namely libgomp-1.dll and libstdc++6.dll, which made things work);

  • This simply means, build boost with the same version of MingW (see also http://sourceforge.net/apps/trac/mingw-w64/wiki/Building%20Boost for ideas about building Boost on MingW)

  • Here's a background thread about this backwards-compatibility-breaking change: http://lists.qt-project.org/pipermail/releasing/2013-September/001442.html



回答2:

The installer for Mingw-W64 didn't work but after I downloaded it from the repository manually I was able to get the thing working. I rebuilt the boost libraries for mingw version 4.9.1 and then it did link to the new libraries. Thank you greatly! Woohoo!



标签: c++ boost mingw