【Ubuntu】静/动态库的制作与链接

库的链接

1. 制作使用静态库

hello里面调用sub0的函数,将sub0的函数封装成静态库的形式

#include <stdio.h>
#include "sub0.h"

int main(int argc, char** argv) {
    if (argc >1) {
        printf("hello %s\n", argv[1]);
    }
    else {
        printf("hello dar\n");
    }
    int a =2, b =1;
    printf("sum = %d\n", my_sum(a, b));
    return 0;
}

sub0

#include <stdio.h>

int my_sum(const int a, const int b) {
    return a +b;
}

sub1

#include <stdio.h>

int my_sub(const int a, const int b) {
    return a -b;
}

静态库的使用及链接

dargon@dd:~/桌面/Test$ gcc -c -o hello.o hello.c
dargon@dd:~/桌面/Test$ gcc -c -o sun0.o sub0.c
dargon@dd:~/桌面/Test$ ar crs libsub.a sub0.o # 将sub封装成静态库,可以使用多个.o生成
dargon@dd:~/桌面/Test$ gcc -o hello hello.o libsub.a # 指定一下静态库的路径
dargon@dd:~/桌面/Test$ ./hello

2. 制作使用动态库的链接

dargon@dd:~/桌面/Test$ gcc -c -o hello.o hello.c
dargon@dd:~/桌面/Test$ gcc -c -o sub0.o sub0.c
dargon@dd:~/桌面/Test$ gcc -c -o sub1.o sub1.c
dargon@dd:~/桌面/Test$ ls
hello.c  helloworld.cpp  mylib   sub0.h  sub1.c  sub1.o
hello.o  libsub.so       sub0.c  sub0.o  sub1.h
dargon@dd:~/桌面/Test$ gcc -o hello hello.o -lsub -L /home/dargon/桌面/Test/mylib
dargon@dd:~/桌面/Test$ ls
hello    hello.o         libsub.so  sub0.c  sub0.o  sub1.h
hello.c  helloworld.cpp  mylib      sub0.h  sub1.c  sub1.o
dargon@dd:~/桌面/Test$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dargon/桌面/Test/mylib
dargon@dd:~/桌面/Test$ ./hello
hello dar
sum = 3
sub = 1

先运行

argon@dd:~/桌面/Test$ gcc -c -o hello.o hello.c
dargon@dd:~/桌面/Test$ gcc -c -o sub0.o sub0.c
dargon@dd:~/桌面/Test$ gcc -c -o sub1.o sub1.c # 生成.o目标文件
dargon@dd:~/桌面/Test$ ls
hello.c  helloworld.cpp  sub0.c  sub0.o  sub1.h
hello.o  mylib           sub0.h  sub1.c  sub1.o
dargon@dd:~/桌面/Test$ gcc -shared -o libsub.so sub0.o sub1.o # 生成共享库文件 libsub.o
dargon@dd:~/桌面/Test$ ls
hello.c  helloworld.cpp  mylib   sub0.h  sub1.c  sub1.o
hello.o  libsub.so       sub0.c  sub0.o  sub1.h

设置

argon@dd:~/桌面/Test$ gcc -o hello hello.o -lsub -L /home/dargon/桌面/Test/mylib
dargon@dd:~/桌面/Test$ ls
hello    hello.o         libsub.so  sub0.c  sub0.o  sub1.h
hello.c  helloworld.cpp  mylib      sub0.h  sub1.c  sub1.o

运行程序

# 类似于将libsub.o放到Ubuntu的/lib目录下,然后运行test程序。
# 或者说声明出这样的一个路径
dargon@dd:~/桌面/Test$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dargon/桌面/Test/mylib
dargon@dd:~/桌面/Test$ ./hello
hello dar
sum = 3
sub = 1

版权声明:本文为Dallas01原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。