【问题标题】:error linking to 32bit boost library with g++使用 g++ 链接到 32 位 boost 库时出错
【发布时间】:2014-11-07 12:54:26
【问题描述】:

我正在 Mac OSX 中创建一个项目并使用 boost 编译库(序列化等)。我将所有依赖项安装为 x86_64 库,但现在想明确制作 32 位 (i386) 并为 32 位用户重新编译我的项目。

我已经用 g++ -m32 在适当的地方重新编译了库,然后使用重新制作了 32 位 boost 库

./bootstrap.sh link=static
./b2 cflags=-m32 cxxflags=-m32 address-model=32 threading=multi architecture=x86 instruction-set=i686

然后我通过显式链接到 32 位库来重新编译我的项目。所以像

g++ file.cpp /usr/local/lib/boost_i386/libboost_serialization.a -m32 -o executable

其中库明确是使用otool 验证的 32 位版本,如下所示(部分)输出(所有列表 cputype 为 i386)

otool -hv -arch all libboost_serialization.a
Archive : libboost_serialization.a
libboost_serialization.a(basic_archive.o):
Mach header
      magic cputype cpusubtype  caps    filetype ncmds sizeofcmds      flags
   MH_MAGIC    I386        ALL  0x00      OBJECT     3       1180 SUBSECTIONS_VIA_SYMBOLS

但是,当我编译我的项目时(尽管大多数依赖项工作正常),它会出错并且此架构缺少符号

明确:

Undefined symbols for architecture i386:
  "boost::archive::detail::shared_ptr_helper::shared_ptr_helper()", referenced from:
      boost::archive::binary_iarchive::binary_iarchive(std::basic_istream<char, std::char_traits<char> >&, unsigned int)in ccCH1ama.o
  "boost::archive::detail::shared_ptr_helper::~shared_ptr_helper()", referenced from:
      boost::archive::binary_iarchive::~binary_iarchive()in ccCH1ama.o
      boost::archive::binary_iarchive::~binary_iarchive()in ccCH1ama.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

我已经明确构建了 32 位库,检查它们实际上是 32 位的,并明确链接到它们,我不知道还能做什么。有什么想法吗?

【问题讨论】:

    标签: boost linker g++


    【解决方案1】:

    原来头文件是 boost v1.55,但 i386 库使用的是最新版本 v1.57。这导致了错误。使用较旧的 v1.55 构建库以匹配标头可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多