如何将Zeromq作为32位库,并将其与标准64位库合并

How to get ZeroMQ as a 32bit library and merge it with the standard 64bit library?

本文关键字:标准 64位 合并 Zeromq 作为 32位库      更新时间:2023-10-16

安装Zeromq(v4.2.2)对configure/make/install或Homebrew的轻而易举,但只有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.alibzmq.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文件以形成通用二进制文件,如您在此处和此处所见。首先将目录更改为找到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

请注意,Symlink libzmq.dylib -> libzmq.5.dylib仍然有效。

就是这样!