使用g+;链接到32位boost库时出错+;

使用g+;链接到32位boost库时出错+;,boost,linker,g++,Boost,Linker,G++,我正在MacOSX中做一个项目,并使用boost编译库(序列化等)。我将所有依赖项安装为x86_64库,但现在希望显式生成32位依赖项(i386),并为32位用户重新编译我的项目 我在适当的地方用g++-m32重新编译了库,然后用 ./bootstrap.sh link=static ./b2 cflags=-m32 cxxflags=-m32 address-model=32 threading=multi architecture=x86 instruction-set=i686 然后通过

我正在MacOSX中做一个项目,并使用boost编译库(序列化等)。我将所有依赖项安装为x86_64库,但现在希望显式生成32位依赖项(i386),并为32位用户重新编译我的项目

我在适当的地方用
g++-m32
重新编译了库,然后用

./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)

然而,当我编译我的项目时(尽管大多数依赖关系工作正常),它会出错,并且这个架构缺少符号

明确地:

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
架构i386的未定义符号: “boost::archive::detail::shared_ptr_helper::shared_ptr_helper()”,引用自: ccCH1ama.o中的boost::archive::binary\u iarchive::binary\u iarchive(std::basic\u istream&,unsigned int) “boost::archive::detail::shared_ptr_helper::~shared_ptr_helper()”,引用自: ccCH1ama.o中的boost::archive::binary\u-iarchive::~binary\u-iarchive() ccCH1ama.o中的boost::archive::binary\u-iarchive::~binary\u-iarchive() ld:未找到架构i386的符号 collect2:ld返回了1个退出状态
我已经显式地构建了32位库,检查它们实际上是32位的,并显式地链接到它们,我不知道还能做什么。有什么想法吗?

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

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