मैं मुसीबत 2 वस्तु फ़ाइलों जिनमें से एक एक विधानसभा भाषा स्रोत फ़ाइल से बनाया गया था और एक अन्य है कि एक सी स्रोत फ़ाइल से किया गया था जोड़ने हो रहा है।किसी ऑब्जेक्ट फ़ाइल को असेंबली भाषा ऑब्जेक्ट फ़ाइल से कैसे लिंक करें?
सी स्रोत कोड:
//main2.c
extern int strlength(char *);
int main(){
char * test = "hello";
int num = strlength(test);
return num;
}
विधानसभा स्रोत कोड:
#strlength.s
.include "Linux32.s"
.section .text
.globl strlength
.type strlength, @function
strlength:
pushl %ebp
movl %esp, %ebp
movl $0, %ecx
movl 8(%ebp), %edx
read_next_byte:
movb (%edx), %al
cmpb $END_OF_FILE, %al
jle end
incl %edx
incl %ecx
jmp read_next_byte
end:
movl %ecx, %eax
popl %ebp
ret
जब मैं संकलन और रन 'जीसीसी' का उपयोग इस तरह:
gcc main2.c strlength.s -m32 -o test
./test
echo $?
मैं 5 मिलता है जो सही बात। लेकिन जब मैं संकलन/अलग से इकट्ठा और फिर 'ld' इस तरह के साथ लिंक:
as strlength.s --32 -o strlength.o
cc main2.c -m32 -o main2.o
ld -melf_i386 -e main main2.o strlength.o -o test
./test
मैं एक विभाजन गलती मिलता है। इसके उत्पन्न होने का कारण क्या है? क्या मैं सी कॉलिंग सम्मेलन का 100% सही तरीके से पालन नहीं कर रहा हूं?