【问题标题】:Reference to __sync_fetch_and_add_4 in boost 1.48 32-bit build not resolved在 boost 1.48 32 位构建中对 __sync_fetch_and_add_4 的引用未解决
【发布时间】:2012-02-03 05:02:19
【问题描述】:

我最近使用 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 或报告我不知道如何在 boost 构建中实现的解决方案(例如,将 -march=i486 传递给 gcc ,如何用 bjam 来完成?)。有人可以给我一些提示吗?谢谢。

【问题讨论】:

    标签: boost 32-bit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      当我在 ubuntu 10.4 lts x64 上编译 boost 1.50.0 时遇到了同样的问题

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

      请注意,但是在 mac os x lion 上,您需要指定架构和地址模型才能在 32 位中编译

      【讨论】:

        猜你喜欢
        • 2015-10-15
        • 2020-09-08
        • 2014-04-10
        • 2010-11-24
        • 1970-01-01
        • 2011-10-18
        • 2013-08-28
        • 2010-11-26
        • 2013-06-10
        相关资源
        最近更新 更多