Apple에서 정적 라이브러리 결합
이 질문에서 접근 방법을 시도했지만 Linux 버전인 것 같습니다.ar
오브젝트 파일을 다시 결합하지 못했기 때문에 Mac 버전과 다릅니다.
기본적으로 실행 스크립트 빌드 단계를 통해 다른 정적 라이브러리를 Xcode 정적 라이브러리 빌드 제품에 병합합니다.
안타깝게도 다른 라이브러리는 자체 빌드 시스템이 있기 때문에 프로젝트에 직접 컴파일할 수 없습니다(따라서 컴파일된 libs를 사용합니다).
다른 라이브러리를 통합하려면ar
빌드 제품을 디컴파일하지 않고 Xcode 생성 라이브러리로 이동합니다.어떻게 하면 좋을까요?
사용할 수 있습니다.libtool
하기 위해서
libtool -static -o new.a old1.a old2.a
멀티아키텍처 스태틱라이브러리를 취급하는 경우는, 각 라이브러리를 솎아내고, 솎아낸 버전을 조합해, 그 결과를 살찌우기 위해서, 약간의 조작이 필요합니다.여기에 원하는 대로 편집할 수 있는 편리한 스크립트가 있습니다.이 스크립트는 이 모든 것을 한 번에 수행할 수 있습니다.이 예에서는 3개의 iOS 라이브러리를 사용합니다.path/to/source/libs/libone.a
,path/to/source/libs/libtwo.a
,그리고.path/to/source/libs/libthree.a
하나의 라이브러리로 통합합니다.libcombined.a
.
#! /bin/bash
INPATH="path/to/source/libs"
LIBPREFIX="lib"
LIBS="one two three"
LIBEXT=".a"
OUT="combined"
ARCHS="armv7 armv7s arm64"
for arch in $ARCHS
do
for lib in $LIBS
do
lipo -extract $arch $INPATH/$LIBPREFIX$lib$LIBEXT -o $LIBPREFIX$lib-$arch$LIBEXT
done
INLIBS=`eval echo $LIBPREFIX\{${LIBS// /,}\}-$arch$LIBEXT`
libtool -static -o $LIBPREFIX$OUT-$arch$LIBEXT $INLIBS
rm $INLIBS
done
OUTLIBS=`eval echo $LIBPREFIX$OUT-\{${ARCHS// /,}\}$LIBEXT`
lipo -create $OUTLIBS -o $LIBPREFIX$OUT$LIBEXT
rm $OUTLIBS
를 사용해 주세요.ar -r
MacOS에서 아카이브를 작성하려면:
ar -x libabc.a
ar -x libxyz.a
ar -r libaz.a *.o
하나를 다른 하나에 연결할 수 있어야 합니다.그러니까... 그냥...ld
이미지를 병합합니다.
언급URL : https://stackoverflow.com/questions/8170450/combine-static-libraries-on-apple
'source' 카테고리의 다른 글
C++에 typedef 키워드와 동등한 Java 또는 방법론이 있습니까? (0) | 2022.08.30 |
---|---|
Java: 서브패키지 가시성? (0) | 2022.08.30 |
Vuetify Switch를 사용하여 Vuex 상태 변경 (0) | 2022.08.29 |
VueJS/nuxt 'state'는 store/store.js의 개체를 반환하는 메서드여야 합니다. (0) | 2022.08.29 |
Java 8에서 String.chars()가 int의 스트림인 이유는 무엇입니까? (0) | 2022.08.29 |