source

Apple에서 정적 라이브러리 결합

gigabyte 2022. 8. 30. 22:21
반응형

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 -rMacOS에서 아카이브를 작성하려면:

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

반응형