我使用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
没有帮助)
答案 0 :(得分:5)
在开头添加#define BOOST_THREAD_USE_LIB
。
请记住链接也提升错误中列出的库(在我的情况下为boost系统)。
答案 1 :(得分:2)
将-lboost_thread-mgw45-mt-1_46选项移动到命令行的末尾(在try1.cpp之后)。 (From chat.)
答案 2 :(得分:1)