Combinare le librerie statiche

Ho provato l’approccio in questo domanda, ma sembra che la versione per linux di ar non è la stessa come la versione per mac dato che non sono riuscito a combinare i file oggetto nuovo.

Quello che mi serve fare è unire un’altra libreria statica nel mio Xcode libreria statica di costruire il prodotto tramite un script in fase di costruzione.

Purtroppo non riesco a compilare l’altra libreria direttamente nel mio progetto, perché ha il proprio sistema di generazione (quindi io uso compilato libs).

Penso che dovrebbe essere possibile unire l’altra libreria via ar in Xcode generato libreria senza decompilare il build del prodotto. Come posso realizzare questo?

 

4 Replies
  1. 71

    è possibile utilizzare libtool farlo

    libtool -static -o new.a old1.a old2.a
    • Questo è in realtà una soluzione migliore rispetto ar. Grazie!
    • Dove posso eseguire questo?
    • qualsiasi riga di comando (bash), si dovrebbe avere libtool nel PERCORSO di cui ha sviluppatori’ estensione. In alternativa, come un post il passaggio di generazione in xcode.
    • È necessario scaricare e installare libtool. Questo è in Xcode strumento da riga di comando.
    • Ho aggiunto questa chiamata come una fase di creazione di script. Maggiori dettagli al sito stackoverflow.com/a/21225126/239408
    • come intgrate old1.un quadro?
    • Questo era esattamente quello che mi serviva. Aggiunta come eseguire script per il passaggio di generazione in XCode e ha lavorato come un fascino. Grazie.

  2. 5

    Se hai a che fare con il multi-architettura librerie statiche, un po ‘ di extra manipolazione è necessario per diluire ogni libreria, unire il assottigliato, versioni, e quindi ingrassare il risultato. Ecco un pratico script che è possibile modificare per la vostra soddisfazione che fa tutto in uno. L’esempio prende tre iOS librerie path/to/source/libs/libone.a, path/to/source/libs/libtwo.a, e path/to/source/libs/libthree.a e li unisce in una singola libreria 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
  3. 0

    Si dovrebbe usare ar -r per creare un archivio su MacOS:

    ar -x libabc.a
    ar -x libxyz.a
    ar -r libaz.a  *.o
    • Questo non funziona affatto. Si sta andando a sovrascrivere i file con lo stesso .o nomi.
  4. -1

    Si dovrebbe solo essere in grado di collegare l’uno all’altro. Quindi… basta usare ld per unire le immagini.

Lascia un commento