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.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 应用程序开发标准教程》
作者:华清远见