使用
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 位版本,如何创建通用二进制文件以便这些项目仍然可以正常工作?
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
文件都必须合并以形成通用二进制文件,如您所见 here 和 here。首先将目录更改为找到 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
仍然有效。
就是这样!