mac os x custom inlet and Weak Link

Custom Entrance
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 custom inlet and Weak Link

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$ 

Weak link
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 custom inlet and Weak Link

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$ 

Guess you like

Origin blog.51cto.com/haidragon/2415630
Recommended