【发布时间】: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 位的,并明确链接到它们,我不知道还能做什么。有什么想法吗?
【问题讨论】: