2017-11-25 18 views
1

ZeroMQ (v4.2.2)를 설치하면 configure/make/install 또는 homebrew가있는 바람을 피할 수 있지만 64 비트 버전 만 사용할 수 있습니다. brew의 --universal 옵션을 시도했지만 범용 옵션을 사용할 수 없으므로 플래그가 무시됩니다.ZeroMQ를 32 비트 라이브러리로 가져 와서 표준 64 비트 라이브러리와 병합하는 방법은 무엇입니까?

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

제 질문은 어떻게 제게 ZeroMQ의 32 비트 라이브러리 버전을 얻을 수 있습니까?

64 비트 버전이 필요한 다른 프로젝트가있는 경우 유니버설 바이너리를 작성하면 해당 프로젝트도 여전히 작동합니다.

답변

1

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 비트 버전 (see here)에 대해 구성 스크립트를 알려줍니다. 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 명령을 통해 수 있습니다 : 심볼릭 링크 libzmq.dylib -> libzmq.5.dylib은 여전히 ​​유효 할 것

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 

참고.

그게 전부 야!