Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ G++;can';t使用Boost for x86编译代码_C++_Boost_G++_Linker Errors - Fatal编程技术网

C++ G++;can';t使用Boost for x86编译代码

C++ G++;can';t使用Boost for x86编译代码,c++,boost,g++,linker-errors,C++,Boost,G++,Linker Errors,我有一个问题:我使用Boost(locks.hpp)编写代码。我的服务器正在运行x64 Ubuntu(Linux)。当我用-m64编译这段代码时,它构建得很好。但是,当我尝试为-m32编译时,会出现以下错误: g++ -fPIC -m32 -shared -Wl,-soname,test.so -ldl -o test.so test.cpp -lboost_thread /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-

我有一个问题:我使用Boost(
locks.hpp
)编写代码。我的服务器正在运行x64 Ubuntu(Linux)。当我用
-m64
编译这段代码时,它构建得很好。但是,当我尝试为
-m32
编译时,会出现以下错误:

g++ -fPIC -m32 -shared -Wl,-soname,test.so -ldl -o test.so test.cpp -lboost_thread

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libboost_thread.so when searching for -lboost_thread
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libboost_thread.a when searching for -lboost_thread
/usr/bin/ld: skipping incompatible //usr/lib/libboost_thread.so when searching for -lboost_thread
/usr/bin/ld: skipping incompatible //usr/lib/libboost_thread.a when searching for -lboost_thread
/usr/bin/ld: cannot find -lboost_thread
collect2: ld returned 1 exit status

我做错了什么?谢谢

您需要32位版本的线程库。您的问题的答案已在stackoverflow.com上。从源代码构建boost时,请使用address model选项。Boost为在Linux上构建提供了很好的支持

bjam address-model=32

您需要32位版本的线程库。您的问题的答案已在stackoverflow.com上。从源代码构建boost时,请使用address model选项。Boost为在Linux上构建提供了很好的支持

bjam address-model=32

尝试安装32位boost软件包:

sudo apt-get install libboost-thread-dev:i386 

尝试安装32位boost软件包:

sudo apt-get install libboost-thread-dev:i386 


虽然我没有使用G++的经验:你有没有可能没有32位版本的boost(我会这样解释“不兼容的东西”)……你确定你安装了32位的boost库?@fvu你能给我一个命令在x64 ubuntu上安装32位的boost库吗?@Robert不,对不起,当我读到这篇文章时,它看起来肯定比我使用的opensuse上的要困难得多……虽然我没有使用G++的经验:有没有可能你没有32位版本的boost(我会这样解释“不兼容的东西”)…你确定你安装了32位boost库吗?@fvu你能给我一个命令在x64 ubuntu上安装32位boost库吗?@Robert不抱歉,当我读到这篇文章时,它看起来肯定比我使用的opensuse上要难很多…谢谢你的回答。您能告诉我如何将这些已编译的头文件和lib添加到g++命令中吗?您可以使用boost“bcp”实用程序:@Dan如果我在64位机器上使用bcp,并将生成的文件夹移动到32位机器上,它还会工作吗?@stevenrose是的,它会工作。BCP为您复制源文件和依赖项;您必须在项目中添加和生成源文件。谢谢您的回答。您能告诉我如何将这些已编译的头文件和lib添加到g++命令中吗?您可以使用boost“bcp”实用程序:@Dan如果我在64位机器上使用bcp,并将生成的文件夹移动到32位机器上,它还会工作吗?@stevenrose是的,它会工作。BCP为您复制源文件和依赖项;您必须在项目中添加和构建源文件。不幸的是,这会强制替换当前的64位开发环境(编译器和许多软件包),因此这太麻烦了。有没有办法将32位和64位并排使用?@arielf,是的,有,但我不知道Ubuntu,所以我不知道如何使用。我很惊讶上面的命令取代了任何东西,而不仅仅是添加了一个新的包。我有许多(C语言)库并排安装(multi-arch:32和64位),没有任何问题。不确定为什么boost
*-dev:i386
包创建者强制它与默认(amd64)boost
-dev
包冲突。由于我已经构建/安装了几个依赖于64位boost版本的软件包,因此,
替换了他的
:i386
软件包中的
子句,强制删除1)64位boost版本和2)所有依赖它的软件包:(@arielf,我使用的发行版上的Boost软件包没有问题,我会要求Ubuntu(或Debian)软件包维护人员对其进行分类。不幸的是,这迫使替换当前的64位开发环境(编译器和许多软件包)所以这太麻烦了。有没有办法将32位和64位并排放在一起?@arielf,是的,有,但我不知道Ubuntu,所以我不知道怎么做。我很惊讶上面的命令取代了任何东西,而不仅仅是添加一个新包。根据我的经验,这只是boost的问题。我有很多(C语言)并排安装的库(multi-arch:32和64位)没有问题。不确定为什么boost
*-dev:i386
包创建者强制它与默认值(amd64)冲突boost
-dev
软件包。由于我已经构建/安装了几个依赖于64位版本boost的软件包,
替换了他的
:i386
软件包中的
子句,强制删除1)64位boost版本和2)依赖于它的所有软件包:(@arielf,我使用的发行版上的Boost软件包没有问题,我会要求Ubuntu(或Debian)软件包维护人员来解决