首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mingw中使用Boost库

在mingw中使用Boost库
EN

Stack Overflow用户
提问于 2011-10-18 20:15:47
回答 4查看 3.7K关注 0票数 4

我正在尝试使用qtcreator中的qmake在mingw (TDM-mingw,基于gcc4.6的32位)上使用boost线程。我设法用以下命令编译了boost 1.4.7

代码语言:javascript
复制
bjam --toolset=gcc --layout=tagged  --without-mpi --without-python -j 4 stage --build-type=complete

然而,我就是不能让它链接。我试图链接到创建的几个libboost_thread库(libboost_thread.a, libboost_thread-mt.a, libboost_thread-mt-dll.a, libboost_thread-mt-s.a),但是它总是给我

代码语言:javascript
复制
ld.exe: warning: cannot find entry symbol nable-stdcall-fixup; defaulting to 00401000
main.o:main.cpp:(.text.startup+0x76): undefined reference to `_imp___ZN5boost6thread12start_threadEv'
main.o:main.cpp:(.text.startup+0x89): undefined reference to `_imp___ZN5boost6thread4joinEv'
main.o:main.cpp:(.text.startup+0x9c): undefined reference to `_imp___ZN5boost6threadD1Ev'
main.o:main.cpp:(.text.startup+0xdb): undefined reference to `_imp___ZN5boost6threadD1Ev'

我尝试编译的代码如下所示:

代码语言:javascript
复制
#include <boost/thread.hpp>
struct thread_main
{ void operator()(){ std::cout<<"Hello World"<<std::endl; } };

int main(int argc, char* argv[])
{
   boost::thread thread((thread_main()));
   thread.join();
   return 0;
}

qmake生成的编译指令如下:

代码语言:javascript
复制
 g++ -c -std=gnu++0x -fopenmp -march=i686 -mtune=generic -O2 -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_HAVE_MMX -DQT_HAVE_3DNOW -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'e:/Qt/4.73/Desktop/Qt/4.7.3/mingw/include' -I'e:/Qt/4.73/Desktop/Qt/4.7.3/mingw/include/ActiveQt' -I'release' -I'../Test' -I'.' -I'e:/Qt/4.73/Desktop/Qt/4.7.3/mingw/mkspecs/win32-g++' -o main.o ../Test/main.cpp
 g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,console -mthreads -Wl -o Test.exe.exe main.o  -L'e:/boost/stage/lib' -L'e:/Qt/4.73/Desktop/Qt/4.7.3/mingw/lib' -fopenmp -l boost_thread 

根据this的说法,它必须用-DBOOST_THREAD_USE_LIB编译,但是这样做只会导致

代码语言:javascript
复制
ld.exe: warning: cannot find entry symbol nable-stdcall-fixup; defaulting to 00401000
main.o:main.cpp:(.text.startup+0x75): undefined reference to `boost::thread::start_thread()'
main.o:main.cpp:(.text.startup+0x87): undefined reference to `boost::thread::join()'
main.o:main.cpp:(.text.startup+0x99): undefined reference to `boost::thread::~thread()'
main.o:main.cpp:(.text.startup+0xd7): undefined reference to `boost::thread::~thread()'

那么,我如何才能使mingw链接到boost_thread (或者,如果是qmake给链接器的编译标志有问题,我如何使它忽略有问题的标志?)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-16 02:56:12

刚才我又重新编译了一次boost,现在它可以工作了,所以我假设这只是bjam出于某种原因使用了错误的mingw版本

票数 0
EN

Stack Overflow用户

发布于 2011-11-11 00:30:59

我认为您需要在main.o之前列出boost_thread --顺序很重要。

票数 1
EN

Stack Overflow用户

发布于 2011-12-08 19:36:23

我通过添加定义行修复了类似的错误:

代码语言:javascript
复制
#define BOOST_THREAD_USE_LIB

在此之前

代码语言:javascript
复制
#include <boost/thread.hpp>

这显然使链接器将libboost_thread-mt.a库用作静态库(应该如此),而不是试图动态链接它或诸如此类。

正如这里所建议的:Code Blocks, MinGW, Boost, and static linking issues

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7807052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档