我正在观看a video,目的是更好地了解目标文件。演示者使用以下示例作为产生非常简单的目标文件的程序的示例:
extern "C" void _start() {
asm("mov $60, %eax\n"
"mov $24567837, %edi\n"
"syscall\n");
}
程序通过编译
clang++ -c step0.cpp -O1 -o step0.o
并通过]链接>
ld -static step0.o -o step0
尝试链接时收到此错误消息:
Undefined symbols for architecture x86_64: "start", referenced from: -u command line option (maybe you meant: __start) ld: symbol(s) not found for inferred architecture x86_64
我没有传递-u命令行选项,所以我不确定为什么会收到该错误消息。
我正在观看视频,以更好地了解目标文件。演示者使用以下示例作为生成非常简单的目标文件的程序的示例:extern“ C” void _start(){...
clang不是删除下划线,而是添加了下划线。您的程序实际上正在导出一个__start
符号,但是ld希望您的入口点具有一个start
符号,即,在您的体系结构中ld默认运行-u start
。