创建C共享库和静态库

1 创建C共享库和静态库

操作环境,Linux系统下。

code

    /* sth.c 库程序 */
unsigned long long sth(unsigned int x, unsigned int y)
{
  return (x+y+x*y);
}

创建主函数调用fuction.c

/* test.c */
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
  unsigned int x, y;
  sscanf(argv[1], "%u", &x);
  sscanf(argv[2], "%u", &y);
  long long res = sth(x, y);
  printf("answer is %u\n", res);
  return 0;
}

创建静态库

gcc -c sth.c

生成sth.o文件

ar rcsv libfoo.a sth.o

生成libsth.a静态库文件
编译主程序

gcc -o test test.c -L . -lsth

生成test可执行文件

./test 5 6

输出
answer is 41

创建共享库(动态库)

gcc库选项的含义

选项 含义
-static 进行静态编译,即链接静态库,禁止使用动态库
-shared 1.可以生成动态库文件。2.进行动态编译,尽可能地链接动态库,只有当没有动态库时才会链接同名的静态库(默认选项可以省略)
-L dir 在库文件的搜索路径列表中添加dir目录
-lname 链接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个都存在,则根据编译方式(-static-shared)来进行链接。
-fPIC(或 -fpic) 生成使用性对地址的位置无关的目标代码(Position Independent Code)。然后通常可以使用gcc-static选项从该PIC目标文件生成动态文件。

首先使用 gcc 的-fPIC 选项为动态库构造一个目标文件

gcc -fPIC -Wall -c sth.c

接下来,使用-shared 选项和已创建的位置无关目标代码,生成一个动态库libsth.so

gcc -shared -o libsth.so sth.o

下面编译主程序,它将会链接到刚生成的动态库 libsth.so

gcc -o test test.c -L . -lsth
sudo cp libsth.so /lib
./test 5 6
answer is 41


参考:《嵌入式 LINUX 应用程序开发标准教程》
作者:华清远见

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章