#include <stdio.h>int cnt;extern voID increment();int main(){ cnt = 0; increment(); printf("%d\n",cnt); return 0;}
甚至更简单的hello.asm:
EXTERN cntsection .text global increment increment: inc DWord [cnt]ret
首先,我输入gcc -c main.c来获得main.o
然后我得到hello.o – nasm -f macho hello.asm -DDARWIN
最后,为了得到一个可执行文件,我做了ld -o main main.o hello.o -arch i386 -lc并得到一个错误:
ld: warning: -macosx_version_min not specifIEd,assuming 10.10ld: warning: ignoring file main.o,file was built for unsupported file format ( 0xCF 0xFA 0xED 0xFE 0x07 0x00 0x00 0x01 0x03 0x00 0x00 0x00 0x01 0x00 0x00 0x00 ) which is not the architecture being linked (i386): main.oUndefined symbols for architecture i386: "_main",referenced from: implicit entry/start for main executable"cnt",referenced from: increment in hello.old: symbol(s) not found for architecture i386
如何修复此链接错误?
解决方法 >指定体系结构(32/64位,选项m32或m64)>链接crt文件,这些文件包含运行时 – 这是调用主函数的代码
修改你的asm文件:
EXTERN _cntsection .textglobal _increment_increment: inc DWord [_cnt]ret
所以最后的命令行应该是:
gcc -c -m32 main.cnasm -f macho hello.asm -DDARWINld hello.o main.o /usr/lib/crt1.o -lc -o main
检查拱门并执行:
file mainmain: Mach-O executable i386./main1总结
以上是内存溢出为你收集整理的链接c和汇编全部内容,希望文章能够帮你解决链接c和汇编所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)