İki arşiv kütüphanesini bir C programına birleştiren ince bir arşivi bağlamaya çalışıyorum. Snow Leopard'daki ince arşive bağlantı
Ben iki basit merhaba dünya fonksiyonları inşa ve komutlarla bir arşiv inşa: İki arşivleri daha sonra, ince arşivi kullanılarak birleştirilirar rcs lib1.a lib1.o
ar rcs lib2.a lib2.o
: o zaman
ar rcsT all_lib.a lib1.a lib2.a
ve gcc ile derlenmiş :
gcc main.o all_lib.a -o hello
Bir hata iletisi ile biter:
ld: Uyarı: Dosya all_lib.a görmezden, dosya desteklenmeyen dosya biçimi için inşa edilmiş mimari değil birbirlerine bağlıdır (x86_64) mimarisi x86_64 için
Tanımsız sembolleri: "_func1", başvurulan: main.o ld içinde _main: Ben lib1.a ve lib2 ile main.o bağlantı çalışırsanız mimari x86_64
için bulunamadı sembolü (ler) main.o gelen başvurulan "_func2", _main. Doğrudan, her şey çalışır.
Mac OSX 10.6.8'de gcc (MacPorts gcc46 4.6.3_3) 4.6.3 ve GNU ar (GNU Binutils) 2.21 kullanıyorum.
Makefile'ı
test1: main.o lib1.o lib2.o
gcc main.o lib1.a lib2.a -o hello
test2: main.o combine
gcc main.o all_lib.a -o hello
lib1.o: lib1.c
gcc -c lib1.c
ar rcs lib1.a lib1.o
lib2.o: lib2.c
gcc -c lib2.c
ar rcs lib2.a lib2.o
combine: lib1.o lib2.o
ar rcsT all_lib.a lib1.a lib2.a
main.o: main.c
gcc -c main.c
clean:
rm -rf *.o *.a hello
main.c
#include<stdio.h>
#include "lib1.h"
#include "lib2.h"
main()
{
printf("Hello World\n");
func1();
func2();
}
lib1.h
#include<stdio.h>
void func1();
lib2.h
#include<stdio.h>
void func2();
lib1.c standart Elma araçlarını kullanarak şikayet olmadan
#include "lib2.h"
void func2()
{
printf("Hello World 2\n");
}
Macport'ta (gcc46) bulunan gcc'nin 64 bit sürümünü kullanıyorum. Standart elma derleyicisini kullanmıyorum çünkü gfortran ile gelmiyor. Şu anda gcc46 + univerisal'i yüklüyorum. İnce arşivin 64-bit kemeri sevmediğine inanıyorum. – Eldila
Her nesne dosyasını incelemek için “dosya” komutunu kullanmanızı ve tüm nesne dosyalarını kütüphaneden çıkarmanızı ve incelemenizi öneririm. Bu, hangi adımların yanlış olduğunu gösteren bazı göstergeler vermelidir. –