2011-11-17 17 views
36

Bu question numaralı yaklaşımdaki yaklaşımı denedim, ancak ar linux sürümü, nesne dosyalarını yeniden birleştiremediğim için mac sürümü ile aynı değil gibi görünüyor.Statik kitaplıkları birleştirin

Temelde yapmak istediğim bir başka statik kitaplığı Xcode statik kitaplık oluşturma ürününe bir çalışma komut dosyası oluşturma aşamasıyla birleştirmektir.

Maalesef diğer kütüphaneyi doğrudan kendi projem olduğu için projemde derleyemiyorum (bu nedenle derlenmiş kütüphaneleri kullanıyorum).

Diğer kitaplığı ar aracılığıyla Xcode tarafından oluşturulan kitaplık içine derleme ürünü derlemeden birleştirmek mümkün olabileceğini düşünüyorum. Bunu nasıl başarabilirim?

cevap

62

bunu

libtool -static -o new.a old1.a old2.a 
+2

Bu aslında "ar" dan daha iyi bir çözümdür. Teşekkürler! –

+0

Bunu çalıştırabilir miyim? –

+0

herhangi bir komut satırı (bash), geliştiricilerin uzantısına sahip olmanız koşuluyla PATH'da libtool olmalıdır. Alternatif olarak, xcode'ta post oluşturma adımı olarak. – Bruce

0

Sadece birini diğerine bağlayabilmeniz gerekir. Yani ... görüntüleri birleştirmek için sadece ld kullanın.

0

Sen MacOS üzerinde bir arşiv oluşturmak için ar -r kullanmalıdır:

ar -x libabc.a 
ar -x libxyz.a 
ar -r libaz.a *.o 
+0

Bu, hiç çalışmıyor. Aynı .o adlarına sahip dosyaların üzerine yazacaksınız. –

3

çoklu mimari statik kütüphaneler dikkatli davranmalıyız, biraz yapmak libtool kullanabilirsiniz Her kütüphaneyi inceltmek, inceltilmiş versiyonları birleştirmek ve sonucu şişirmek için ekstra manipülasyon gereklidir. İşte tüm bunları bir arada yapan sizin memnuniyetinize göre düzenleyebileceğiniz kullanışlı bir betik. Örnek, üç iOS kitaplığını path/to/source/libs/libone.a, path/to/source/libs/libtwo.a ve path/to/source/libs/libthree.a alır ve bunları tek bir kitaplığa libcombined.a birleştirir.

#! /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