2016-09-13 6 views
5

में संदर्भित मैं एक समारोह के एक .c फाइल में परिभाषित (माना funcs.c) है।unresolvable प्रतीक 'नाम' अभिव्यक्ति

और मैं एक और .c फ़ाइल (main.c) इस समारोह का उपयोग करता है जो संकलन कर रहा हूँ, और मैं कमांड लाइन में प्रतीक नाम सेट कर रहा हूं:

gcc -Wl,--just-symbols=symbolsfile.txt main.c -o main -lname 

symbolsfile.txt:

symbolsfile.txt:1: unresolvable symbol 'funName' referenced in expression
symbolsfile.txt:2: unresolvable symbol 'expression2' referenced in expression
collect2.exe: error: ld returned 1 exit status

0:

FunSym = funName;
Symbol2 = expression2;
...

लेकिन मैं इस जोड़ने त्रुटि मिल रही है

मैंने funcs.c में एक फ़ंक्शन घोषणा जोड़ने की कोशिश की (मेरे पास .h फ़ाइल नहीं है), लेकिन यह कोई चीज़ नहीं बदली।

अगर मैं FunSym = funNameFunSym = garbage करने, त्रुटि परिवर्तन करने के लिए बदल "अपरिभाषित प्रतीक ...", तो मैं अभिव्यक्ति funName लगता है पाया जाता है।

अद्यतन:

मैं main.c के शीर्ष पर या एक अलग हेडर फाइल टिप्पणियों में सुझाव के रूप में में extern void *funName(); जोड़ने की कोशिश की है, लेकिन यह समस्या (एक ही त्रुटि) का समाधान नहीं किया। क्या ध्वज --just-symbols को main.c संकलित करने या लाइब्रेरी को संकलित/लिंक करने में जोड़ा जाना आवश्यक है (libname.so)?

+0

आप अपने साझा लिब के लिए इंटरफेस के साथ एक हेडर फाइल मिला है तो इस तरह पुस्तकालय संकलन? क्या lib पहुंच योग्य है: शायद आपको '-L' विकल्प जोड़ना होगा? – LPs

+0

'-lname.so' ->' -lname' – LPs

+0

@ एलपीएस हाँ यह पोस्ट में एक टाइपो है (अभी तय)। मैं वास्तव में '-lname' लिखता हूं। और हाँ यह पहुंच योग्य है। (मेरे पास '-L' है) –

उत्तर

1

लाइब्रेरी को जोड़ने के लिए main.c को संकलित करने से --just-symbols ध्वज को ले जाएं।

gcc -g -Wl,--just-symbols=symbolsfile.txt -shared -o libname.so *.o 

और main.c इस तरह::

gcc main.c -o main -lname 
संबंधित मुद्दे