linker - मैं जीसीसी को न्यूलाइब कार्यान्वयन कार्यों के कस्टम कार्यान्वयन का उपयोग कैसे कर सकता हूं?



embedded arm (1)

अगर इसे libca में मेम्कपी memcpy() मिल रहा है, तो यह किसी "बिल्ट-इन" के साथ परस्पर विरोधी नहीं है, बल्कि नए लाब कार्यान्वयन के साथ। आपको -nostdlibs विकल्प निर्दिष्ट करने की आवश्यकता हो सकती है और आवश्यक रूप से स्पष्ट रूप से libc.a और libm.a लिंक कर सकते हैं।

ऑब्जेक्ट (.ओ) फाइल लाइब्रेरी अभिलेखागार (। ए) फाइल से पहले लिंक की जाती है, इसलिए कोई प्रतीक ऑब्जेक्ट फ़ाइल से हल हो जाता है, तो यह अभिलेखागार के लिए खोज नहीं किया जाएगा। यदि आप एक स्थैतिक-लिंक लाइब्रेरी में अपने ओवरराइड को स्थान देते हैं, तो आप इसे सीधे मानक लाइब्रेरी (या किसी अन्य लाइब्रेरीज़ जो मानक लाइब्रेरी का उपयोग करते हैं) से लिंकर कमांड लाइन पर सूचीबद्ध करते हैं।

[जोड़ा गया] निम्नलिखित मूल रूप से एक "टिप्पणी" थी, लेकिन शायद उत्तर में होना चाहिए; यह प्रश्न में "1 संपादित करें" के जवाब में है, और लिंक ऑर्डर के बारे में नीचे दी गई टिप्पणी:

-nostartfiles -o project.elf -lc Project.a टू- -nostdlib -o project.elf -start-group Project.a -lc -end-group-nostdlib स्टार्ट-अप फ़ाइलों (जैसे -nostartfiles ) और मानक लाइब्रेरी दोनों के डिफ़ॉल्ट लिंक को अक्षम करता है। ग्रूटर ग्रुपिंग समूह में पुस्तकालयों को फिर से खोजा जाने का कारण बनता है जब तक कि आगे के प्रतीकों का समाधान नहीं किया जा सकता है, आउट-ऑफ-ऑर्डर और सर्कुलर निर्भरता जैसी आपकी समस्या हल हो सकती है। समूह स्विचेस के लिए एक वैकल्पिक रूप है -( Project.a -lc -)

मैं एआरएम माइक्रोकंट्रोलर (एसएएम 7) के लिए एम्बेडेड सॉफ़्टवेयर पर काम कर रहा हूं और Yagarto टूलचैन का उपयोग कर रहा हूं।

मेरा कोड वर्तमान में लिबसेब। हालांकि मैं अपने काम के पहले संस्करण में memcpy builtin फ़ंक्शन के एक कस्टम कार्यान्वयन का उपयोग करना चाहते हैं

मैंने जीसीसी मैनुअल में निर्दिष्ट के रूप में -fno-builtin और / or -fno-builtin-memcpy का उपयोग करने की कोशिश की है लेकिन लिंकर अभी भी शिकायत करेगा निम्नलिखित चेतावनी:

contiki-crazy-horse.a(flashd_efc.o): In function `memcpy':
C:\Users\Melvin\GitRepo\projects\Amatis_Project\SAM7_Contiki\examples\er-rest-example/../../cpu/arm//at91sam7s-x/./flashd_efc.c:669: multiple definition of `memcpy'
c:/toolchains/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.2/../../../../arm-none-eabi/lib\libc.a(lib_a-memcpy.o):C:\msys\1.0\home\yagarto\newlib-build\arm-none-eabi\newlib\libc\string/../../../../../newlib-1.19.0/newlib/libc/string/memcpy.c:78: first defined here
collect2: ld returned 1 exit status
make: *** [rest-server-example-nosyms.crazy-horse] Error 1
../../cpu/arm/at91sam7s-x/Makefile.at91sam7s-x:181: recipe for target `rest-server-example-nosyms.crazy-horse' failed

कुछ जीसीसी अंतर्निर्मित कार्यों के कस्टम कार्यान्वयन का सही तरीका क्या है?

संपादन 1: लिंकिंग कमांड जोड़ना मैं उपयोग कर रहा हूँ Porject.a नीचे दिए गए कोड में एक प्रोजेक्ट ऑब्जेक्ट फाइलों के साथ बनाई गई एक संग्रह फ़ाइल है।

CC       = arm-none-eabi-gcc
CFLAGSNO = -I. -I$(CONTIKI)/core -I$(CONTIKI_CPU) -I$(CONTIKI_CPU)/loader \
       -I$(CONTIKI_CPU)/dbg-io \
           -I$(CONTIKI)/platform/$(TARGET) \
           ${addprefix -I,$(APPDIRS)} \
           -DWITH_UIP -DWITH_ASCII -DMCK=$(MCK) \
           -Wall $(ARCH_FLAGS) -g -D SUBTARGET=$(SUBTARGET)

CFLAGS  += $(CFLAGSNO) -O -DRUN_AS_SYSTEM -DROM_RUN  -ffunction-sections

LDFLAGS += -L $(CONTIKI_CPU) --verbose -T $(LINKERSCRIPT) -nostartfiles  -Wl,-Map,$(TARGET).map

$(CC) $(LDFLAGS) $(CFLAGS) -nostartfiles -o project.elf -lc Project.a