在boost 1.48中引用__sync_fetch_and_add_4 32位构建未解析

时间:2012-01-05 11:00:25

标签: boost 32-bit

我最近使用gcc 4.5在64位计算机上使用这些指令构建了32位Boost 1.48:

./bootstrap.sh --prefix=$INSTALL_PREFIX --exec-prefix=$INSTALL_PREFIX --with-libraries=system,filesystem,python --with-python=python2
./b2 address-model=32 architecture=x86 install

编译似乎很好,库已正确放入安装文件夹中。但是当我尝试将libboost_filesystem.so链接到我的某个程序时,我收到以下错误:

/gpfs/wizard/flight/analysis/mori/GGSINSTALL/install/lib/libboost_filesystem.so: undefined reference to `__sync_fetch_and_add_4'
collect2: ld returned 1 exit status

我使用CMake管理我的代码;这些是我用来配置32位版本的标志:

-DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32

我不知道我在Boost配置或通过CMake标志在我的软件配置中做错了什么,但我怀疑是Boost。我发现了一些关于这个主题的讨论(例如undefined reference to sync_fetch_and_add_4),但它们几乎总是指其他架构,如arm或report解决方案,我不知道如何在boost构建中实现(例如传递-march = i486)对于gcc,如何用bjam完成?)。请问有人给我一些提示吗?感谢。

2 个答案:

答案 0 :(得分:1)

我找到的一个解决方案是在b2调用中删除architecture = x86标志。这里描述了另一个有效的解决方案:How do I force a 32 bit build of boost with gcc?

答案 1 :(得分:0)

当我在ubuntu 10.4 lts x64

上编译boost 1.50.0时,

有同样的问题

我使用了与描述相同的标志....正如Nicola Mori建议跳过architecture = x86标志并生成libs。这对我有用

请注意,但是在mac os x lion上你需要指定架构和地址模型以便在32位编译