मैं एक पतली संग्रह को जोड़ने का प्रयास कर रहा हूं जो दो संग्रह पुस्तकालयों को एक सी प्रोग्राम में जोड़ती है।हिम तेंदुए पर पतले संग्रह से लिंक
मैं दो सरल हैलो दुनिया कार्यों का निर्माण किया और आदेश के साथ एक संग्रह का निर्माण:
ar rcs lib1.a lib1.o
ar rcs lib2.a lib2.o
दो अभिलेखागार फिर एक पतली संग्रह का उपयोग कर बनाए गए हैं,:
ar rcsT all_lib.a lib1.a lib2.a
और फिर जीसीसी के साथ संकलित :
gcc main.o all_lib.a -o hello
मैं एक त्रुटि संदेश के साथ समाप्त होता हूं:
ld: चेतावनी: फ़ाइल all_lib.a अनदेखी, फ़ाइल असमर्थित फ़ाइल स्वरूप के लिए बनाया गया था जो वास्तुकला नहीं है जोड़ा जा रहा है (x86_64)
वास्तुकला x86_64 के लिए अपरिभाषित प्रतीक: "_func1", से संदर्भित: main.o में _main "_func2", से संदर्भित: main.o ld में _main: प्रतीक (रों) अगर मैं lib1.a और lib2 साथ main.o लिंक करने के प्रयास वास्तुकला x86_64
के लिए नहीं मिला। एक सीधा, सब कुछ काम करता है।
मैक ओएसएक्स 10.6.8 पर जीसीसी (मैकपॉर्ट्स जीसीसी 46 4.6.3_3) 4.6.3 और जीएनयू आर (जीएनयू बिनुटिल्स) 2.21 का उपयोग कर रहा हूं।
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 मानक एप्पल उपकरणों का उपयोग बिना किसी शिकायत के
#include "lib1.h"
void func1()
{
printf("Hello World 1\n");
}
lib2.c
#include "lib2.h"
void func2()
{
printf("Hello World 2\n");
}
मै मैकपोर्ट (gcc46) में मिली जीसीसी के 64-बिट संस्करण का उपयोग कर रहा हूं। मैं मानक सेब कंपाइलर का उपयोग नहीं कर रहा हूं क्योंकि यह gfortran के साथ नहीं आता है। मैं वर्तमान में gcc46 + univerisal स्थापित कर रहा हूँ। मुझे विश्वास है कि पतली संग्रह 64-बिट आर्क पसंद नहीं है। – Eldila
मेरा सुझाव है कि आप प्रत्येक ऑब्जेक्ट फ़ाइल की जांच करने के लिए "फ़ाइल" कमांड का उपयोग करें और आप पुस्तकालय से सभी ऑब्जेक्ट फ़ाइलों को निकाल दें और उनकी जांच करें। इससे कुछ संकेत दिए जाएंगे कि कौन से कदम गलत व्यवहार कर रहे हैं। –