我們接觸程序的時候,一般編譯和鏈接是一起做的,所以不容易看到編譯和鏈接的不同,這裏我們講一下編譯和鏈接的區別。
範例1:
#main.c
int main(){
return 0;
}
#include "LinuxFrame.h"
int main(){
startkernel();
return 0;
}
Undefined symbols for architecture x86_64:
"_startkernel", referenced from:
_main in main-856f96.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
#include "stdio.h"
#include "LinuxFrame.h"
void LoadBootCodeFromExDisk();
void startkernel(){
LoadBootCodeFromExDisk();
printf("abcdefg\n");
}
void LoadBootCodeFromExDisk()
{
}
main.c:14:5: warning: implicit declaration of function 'startkernel' is invalid in C99 [-Wimplicit-function-declaration]
startkernel();
^
1 warning generated.