2012-07-08 44 views
0

我遇到问题:我使用Boost编写代码(locks.hpp)。我的服务器正在运行x64 Ubuntu(Linux)。当我编译这个代码与-m64,它建立罚款。但是,当我尝试编译为-m32,我得到这些错误:G ++无法使用Boost for x86编译代码

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 

我在做什么错?谢谢!

+1

虽然我有G ++没有经验:是有可能,你有升压没有32位版本(有点我会怎样解释“不兼容东西“)... – MFH 2012-07-08 22:04:59

+3

你确定你安装了32位boost库吗? – fvu 2012-07-08 22:05:06

+0

@fvu你能给我一个命令来安装32位升压库在X64 Ubuntu的? – Robert 2012-07-08 22:35:10

回答

2

您需要32位版本的线程库。您的问题的answer已经在stackoverflow.com上。从源代码构建提升时,请使用地址模型选项。 Boost为Linux上的构建提供了很好的documentation

bjam address-model=32 
+0

感谢您的回答。你能告诉我如何将这些编译的头文件和库添加到g ++命令? – Robert 2012-07-09 12:46:03

+0

您可以使用boost“bcp”实用程序:http://www.boost.org/doc/libs/1_50_0/tools/bcp/doc/html/index.html – Dan 2012-07-10 15:39:03

+0

@Dan如果我在64位上使用BCP并将生成的文件夹移动到32位机器上,它仍然可以工作吗? – 2014-08-17 12:40:13

3

尝试安装32位提升包装:

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

不幸的是,这会强制替换当前的64位开发环境(编译器和许多软件包),因此这太具侵入性了。有没有办法同时拥有32位和64位? – arielf 2014-07-10 00:16:26

+0

@arielf,是的,有,但我不知道Ubuntu,所以我不知道该怎么做。我惊讶于上面的命令_replaces_任何东西,而不是仅仅添加一个新的包。 – 2014-07-10 09:13:52

+0

以我的经验,这只是一个提升的问题。我有许多(C语言)库并排安装(多拱:32和64位),没有问题。不知道为什么boost * * -dev:i386'包创建者强制它与默认(amd64)boost'-dev'包冲突。由于我已经构建/安装了几个依赖于64位boost版本的软件包,他的':i386'软件包中的'replaces'子句强制删除1)64位boost版本和2)所有依赖它的软件包。 :( – arielf 2014-07-10 21:17:12