1.在main之前运行的C代码
before_main.c
#include <stdio.h>
__attribute__((constructor))
void before_main(){
printf("before main\n");
}
int main(void){
printf("hello world\n");
return 0;
}
gcc before_main.c
2.不从main运行的C代码
写任意一个函数,编译后,只需要在链接的时候使用
ld --entry=函数名
3.既可以运行又可以被链接的程序
创建3个文件:sum_fun.c call_sum.c Makefile
sum_fun.c
#include <stdio.h>
#include <unistd.h>
int sum(int a,int b){
return a+b;
}
int main(){
int sumValue = sum(3,5);
printf("sum Value is %d\n",sumValue);
while(1){
sleep(1000);
}
return 0;
}
call_sum.c
#include <stdio.h>
int sum(int a,int b);
int main(){
int value = sum(6,4);
printf("sum value:%d\n",value);
return 0;
}
Makefile
all:
gcc -c -fPIE sum_fun.c;gcc -rdynamic -o sum_fun -pie sum_fun.o
gcc -o call_sum call_sum.c ./sum_fun
clean:
rm -fr *.o sum_fun.o sum_fun call_sum