g ++包括boost库

时间:2011-03-13 09:55:51

标签: c++ boost g++ static-linking

我使用bjam构建了我的boost库,然后将所有.a个文件移动到c:\Server\libs\boost_1_46_0\lib

如果我想编译我的程序,则会出现一些错误:

编译命令

g++ -Ic:\Server\libs\boost_1_46_0\ -Lc:\Server\libs\boost_1_46_0\lib\ -lboost_thread-mgw45-mt-1_46 -o try1 try1.cpp

错误

C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text+0xe9): undefined
 reference to `_imp___ZN5boost6thread4joinEv'
C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text+0x120): undefine
d reference to `_imp___ZN5boost6threadD1Ev'
C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text+0x138): undefine
d reference to `_imp___ZN5boost6threadD1Ev'
C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text$_ZN5boost11this_
thread18interruptible_waitEm[boost::this_thread::interruptible_wait(unsigned lon
g)]+0x40): undefined reference to `_imp___ZN5boost11this_thread18interruptible_w
aitEPvNS_6detail7timeoutE'
C:\Users\FEHERG~1\AppData\Local\Temp\ccB46To7.o:try1.cpp:(.text$_ZN5boost6thread
C1IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4
_EEEEPNS0_5dummyEE4typeE[boost::thread::thread<void (*)()>(void (*)(), boost::di
sable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*
)()> >, boost::thread::dummy*>::type)]+0x23): undefined reference to `_imp___ZN5
boost6thread12start_threadEv'
collect2: ld returned 1 exit status

任何人都可以帮我解决这个问题的问题吗?

我遵循了本教程: http://antonym.org/2009/05/threading-with-boost---part-i-creating-threads.html

所以这是来源:http://pastebin.com/YqCPLNwU

更新

我认为错误不在于库,错误在库中。 我使用带有toolchain=gcc multithread选项的bjam构建它。

更新

这是objdump http://pastebin.com/4fpqYb7d

更新

我发现问题在于链接器想要链接动态链接或类似的东西。

Code Blocks, MinGW, Boost, and static linking issues

那里“Jack Kelly”说我需要在源文件的开头添加#define BOOST_THREAD_USE_LIB。但这对我没有帮助。我如何静态链接库? (-static没有帮助)

3 个答案:

答案 0 :(得分:5)

在开头添加#define BOOST_THREAD_USE_LIB

请记住链接也提升错误中列出的库(在我的情况下为boost系统)。

答案 1 :(得分:2)

将-lboost_thread-mgw45-mt-1_46选项移动到命令行的末尾(在try1.cpp之后)。 (From chat.

答案 2 :(得分:1)