如何获取 ZeroMQ 作为 32 位库并将其与标准 64 位库合并?

问题描述 投票:0回答:1

使用

configure/make/install
或自制软件安装 ZeroMQ (v4.2.2) 轻而易举,但只有 64 位版本可用。我尝试了brew的
--universal
选项,但它说通用选项不可用,因此该标志被忽略。

$ brew install zmq --universal
Warning: zeromq: this formula has no --universal option so it will be ignored!

我的问题是,如何获得 ZeroMQ 的 32 位库版本?

而且,如果我有其他项目仍然需要 64 位版本,如何创建通用二进制文件以便这些项目仍然可以正常工作?

c++ macos zeromq
1个回答
1
投票

ZeroMQ 的库文件安装在标准

/usr/local/lib
位置,但如果使用
brew
安装 ZeroMQ,则会创建到
/usr/local/Cellar/zeromq/4.2.2/lib
位置的符号链接。如果您查看该目录,您会发现
libzmq.a
libzmq.5.dylib
。这两个文件都是 64 位,必须与 32 位版本合并。

如果您从他们的网站下载 ZeroMQ,您可以更改

configure
脚本,如下所示:

./configure CC="gcc -m32" CXX="g++ -m32" --prefix=`pwd`/i32

CC
标志和
CXX
标志告诉脚本配置 32 位版本(参见此处)。
prefix
标志运行
pwd
命令来指示配置脚本将文件安装到当前工作目录中的用户
i32
目录。
make && make install
ZeroMQ 像往常一样,您应该在
./i32/lib
目录中有 32 位库。您可以重命名这些文件以反映其 32 位性质:

mv ./i32/lib/libzmq.a ./i32/lib/libzmq_i32.a
mv ./i32/lib/libzmq.5.dylib ./i32/lib/libzmq_i32.5.dylib

.a
.dylib
文件都必须合并以形成通用二进制文件,如您所见 herehere。首先将目录更改为找到 64 位库的位置,
/usr/local/lib
/usr/local/Cellar/zeromq/4.2.2/lib
。您可以重命名库文件以反映其 64 位性质:

mv libzmq.a libzmq_i64.a
mv libzmq.5.dylib libzmq_i64.5.dylib 

通过

lipo
命令合并库:

lipo -create zeromq-4.2.2/i32/lib/libzmq_i32.a libzmq_i64.a -output libzmq.a
lipo -create zeromq-4.2.2/i32/lib/libzmq_i32.5.dylib libzmq_i64.5.dylib -output libzmq.5.dylib

请注意,符号链接

libzmq.dylib -> libzmq.5.dylib
仍然有效。

就是这样!

© www.soinside.com 2019 - 2024. All rights reserved.