动态库的构建

编写库

fun.h:

1
void info();

fun.c:

1
2
3
4
5
6
#include <stdio.h>
#include "fun.h"

void info(){
    printf("you know me!");
}

编译

1
gcc -fPIC -shared fun.c -o libfun123.so

使用

main.c:

1
2
3
4
5
6
#include "fun.h"
int main(int argc, char const *argv[])
{
    info();
    return 0;
}
1
gcc main.c libfun123.so -o app.out

此时检查编译的可执行文件:

1
2
3
4
5
➞  ldd app.out
        linux-vdso.so.1 (0x00007fffdbbee000)
        libfun123.so => not found
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2f3e5a9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2f3e7cf000)

发现找不到动态库,我们将库需要加入到库目录中。

1
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/mnt/d/workspace/codeblock/temp/share

此时找到了

1
2
3
4
5
➞  ldd app.out
        linux-vdso.so.1 (0x00007ffcfcf96000)
        libfun123.so => /mnt/d/workspace/codeblock/temp/share/libfun123.so (0x00007fcdd8cb7000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcdd8a98000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fcdd8cc3000)

运行:

1
2
➞  ./app.out
you know me!%