2
#include <boost/thread/thread.hpp>
#include <iostream>

using namespace std;

void hello() {
    cout << "Hello world, I'm a thread!" << endl;
}

int main(int argc, char* argv[]) {
    cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

    boost::thread thrd(&hello);
    thrd.join();
    return 0;
}

I am sure there is nothing wrong with the code above because I have tested it on Microsoft Visual Studio Express Edition. But it doesn't compile in Eclipse.

I'm doing this on Windows machine, I am using Eclipse Kepler with MinGW toolchain, I install boost in this directory D:/tool/boost_1_54_0 with this command ./b2 install --with-thread --libdir=stage/lib --includedir=stage/include --build-type=complete stage toolset=msvc. I have configure additional include directory, library path, and the thread library, which is boost_thread-vc110-mt-1_54 and libboost_system-vc110-mt-1_54, in Libraries (-l) section (project properties > C/C++ build > Settings > MinGW C++ Linker > Libraries)?

This is the output of the compilation, do you see any clue on it?

15:52:07 **** Incremental Build of configuration Debug for project Cpp2 ****
Info: Internal Builder is used for build
g++ "-LD:\\tool\\boost_1_54_0\\stage\\lib" -o Cpp2.exe "src\\Cpp2.o" -llibboost_thread-vc110-mt-1_54 -llibboost_system-vc110-mt-1_54 
src\Cpp2.o: In function `_static_initialization_and_destruction_0':
D:/tool/boost_1_54_0/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
D:/tool/boost_1_54_0/boost/system/error_code.hpp:223: undefined reference to `boost::system::generic_category()'
D:/tool/boost_1_54_0/boost/system/error_code.hpp:224: undefined reference to `boost::system::system_category()'
src\Cpp2.o: In function `thread_exception':
D:/tool/boost_1_54_0/boost/thread/exceptions.hpp:51: undefined reference to `boost::system::system_category()'
src\Cpp2.o: In function `thread_data_base':
D:/tool/boost_1_54_0/boost/thread/win32/thread_data.hpp:123: undefined reference to `vtable for boost::detail::thread_data_base'
src\Cpp2.o: In function `ZN5boost6thread12start_threadEv':
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:180: undefined reference to `boost::thread::start_thread_noexcept()'
src\Cpp2.o: In function `~thread':
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:255: undefined reference to `boost::thread::detach()'
src\Cpp2.o: In function `ZN5boost6thread4joinEv':
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:751: undefined reference to `boost::thread::get_id() const'
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:751: undefined reference to `boost::this_thread::get_id()'
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:756: undefined reference to `boost::thread::join_noexcept()'
src\Cpp2.o: In function `~thread_data':
D:/tool/boost_1_54_0/boost/thread/detail/thread.hpp:91: undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
collect2: ld returned 1 exit status
huahsin68
  • 6,819
  • 20
  • 79
  • 113

2 Answers2

5

-llibboost_thread-vc110-mt-1_54

should be

-lboost_thread-vc110-mt-1_54

I works for me with boost_1.45 with following command line options

-IC:\MinGW\boost_1_45_0 -LC:\MinGW\boost_1_45_0\stage\lib -lboost_thread-mgw46-mt-1_45

P0W
  • 46,614
  • 9
  • 72
  • 119
  • I notice that your library name contain `mgw46`, and mine one showing `g++ "-LD:\\tool\\boost_1_54_0\\stage\\lib" -o Cpp2.exe "src\\Cpp2.o" -lboost_thread-vc110-mt-1_54 -lboost_system-vc110-mt-1_54` during compilation, does it matter? I mean do I need to configure MinGW toolset during boost compilation? Referring to the documentation, by specifying `toolset=gcc` will automatically configure GCC/MinGW compatible libraries for boost. – huahsin68 Sep 07 '13 at 10:26
  • @huahsin68 probably that's another issue, you need to build boost libraries using [Mingw](http://stackoverflow.com/q/4926990/1870232) – P0W Sep 07 '13 at 10:36
2

First run bootstrap.bat mingw and then b2 toolset=gcc in boost_1_##_0/.

You should, after some time, end up with a populated boost_1_##_0/stage/lib folder containing libboost_thread-mgw48-mt-1_55.a (or similarly named).

You will want to then add boost_1_##_0/stage/lib as a library path for the MinGW C++ Linker in the project properties and add boost_system-mgw48-mt-1_55 & boost_thread-mgw48-mt-1_55 as libraries without the lib prefix and .a ending. (Order may also matter so try putting system first if it isn't)

Enigma
  • 1,247
  • 3
  • 20
  • 51