创建C共享库和静态库

2019-04-15 17:27发布

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 #include 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 ", 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.sogcc -shared -o libsth.so sth.o 下面编译主程序,它将会链接到刚生成的动态库 libsth.sogcc -o test test.c -L . -lsth sudo cp libsth.so /lib ./test 5 6 answer is 41

文章目录


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