mac os x 自定義入口與弱鏈接

自定義入口
libhello.c

#include <stdio.h>

void
my_start(void)
{
    printf("my_start\n");
}

void
hello(void)
{
    printf("Hello, World!\n");
}

main.c

extern void hello(void);

int
main(void)
{
    hello();
    return 0;
}

mac os x 自定義入口與弱鏈接

haidragondeMacBook-Air:2-8 haidragon$ cd ../2-9
haidragondeMacBook-Air:2-9 haidragon$ ls
libhello.c  main.c
haidragondeMacBook-Air:2-9 haidragon$ gcc -c main.c libhello.c
haidragondeMacBook-Air:2-9 haidragon$ ls
libhello.c  libhello.o  main.c      main.o
haidragondeMacBook-Air:2-9 haidragon$ gcc -dynamiclib -o libhello.dylib -install_name libhello.dylib -init _my_start libhello.o
haidragondeMacBook-Air:2-9 haidragon$ ls
libhello.c  libhello.dylib  libhello.o  main.c      main.o
haidragondeMacBook-Air:2-9 haidragon$ gcc -o main.dynamic main.o -L. -lhello
haidragondeMacBook-Air:2-9 haidragon$ ls
libhello.c  libhello.dylib  libhello.o  main.c      main.dynamic    main.o
haidragondeMacBook-Air:2-9 haidragon$ ./main.dynamic 
my_start
Hello, World!
haidragondeMacBook-Air:2-9 haidragon$ 

弱鏈接
libweakfunc.c

#include <stdio.h>

void
weakfunc(void)
{
    puts("I am a weak function.");
}

main.c

#include <stdio.h>

extern void weakfunc(void) __attribute__((weak_import));

int
main(void)
{
    if (weakfunc)
        weakfunc();
    else
        puts("Weak function not found.");

    return 0;
}

mac os x 自定義入口與弱鏈接

haidragondeMacBook-Air:2-9 haidragon$ cd ../2-10
haidragondeMacBook-Air:2-10 haidragon$ ls
libweakfunc.c   main.c
haidragondeMacBook-Air:2-10 haidragon$ gcc -c libweakfunc.c 
haidragondeMacBook-Air:2-10 haidragon$ gcc -dynamiclib -o libweakfunc.dylib -install_name libweakfunc.dylib libweakfunc.o
haidragondeMacBook-Air:2-10 haidragon$ ls
libweakfunc.c       libweakfunc.dylib   libweakfunc.o       main.c
haidragondeMacBook-Air:2-10 haidragon$ MACOSX_DEPLOYMENT_TARGET=10.14.2 gcc -o main main.c -L. -lweakfunc
haidragondeMacBook-Air:2-10 haidragon$ ls
libweakfunc.c       libweakfunc.o       main.c
libweakfunc.dylib   main
haidragondeMacBook-Air:2-10 haidragon$ ./main
I am a weak function.
haidragondeMacBook-Air:2-10 haidragon$ rm ./libweakfunc.dylib 
haidragondeMacBook-Air:2-10 haidragon$ ls
libweakfunc.c   libweakfunc.o   main        main.c
haidragondeMacBook-Air:2-10 haidragon$ ./main
Weak function not found.
haidragondeMacBook-Air:2-10 haidragon$ 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章