静态库*.a和动态库*.so生成及调用
来源:互联网 发布:最全短期网络理财投资 编辑:程序博客网 时间:2024/05/22 16:50
gcc编译器工具一般位于/usr/bin或者/usr/local/bin目录,但它会从其它位置运行各种编译器支持的应用程序,这个位置可能是
/usr/lib/gcc-lib/目录,GNU C/C++编译器的各个工具和GNU专用头文件都保存在这里。
头文件,一般位于/usr/include,包含头文件编译:gcc -I/指定路径/include hellworld.c
库文件,一般位于/lib或者/usr/lib,编译额外目录的库文件:gcc -L/指定目录 -l库名 helloworld.c
.a为静态库,.so为共享库(动态库)
静态库的生成及调用:(1)首先编写一个.c文件add.c,内容如下:
首先将其加-c选项编译为add.o文件:gcc -c add.c
(2)写一个add的头文件add.h,包含add的外部声名,内容如下:
(3)写一个主函数,test.c,内容如下:
gcc -c test.c 生成test.o
现在如果不用静态库其实已经可以用gcc -o app test.o add.o就可以生成可执行文件app了。
(4)生成静态库
(注意*.a文件不能放*.o前面,这样子编译,*.a不一定要遵循命名格式)
(-L.表示除了搜索标准C语言库外还要搜索当前目录, 也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库)
动态库的生成及调用:
(1)首先编写一个.c文件add.c,内容如下:
编译生成*.so动态库:gcc -fPIC -shared libadd.so add.c
(2)写一个主函数,test.c,内容如下:
gcc -o app test.c libadd.so 生成app可执行文件或gcc -o app test.c -L. -ladd也行(-L.表示除了搜索标准C语言库外还要搜索当前目录,
也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库))。
如果运行app出现无法找到*.so文件,请把*.so拷到/usr/lib目录下即可。
/usr/lib/gcc-lib/目录,GNU C/C++编译器的各个工具和GNU专用头文件都保存在这里。
头文件,一般位于/usr/include,包含头文件编译:gcc -I/指定路径/include hellworld.c
库文件,一般位于/lib或者/usr/lib,编译额外目录的库文件:gcc -L/指定目录 -l库名 helloworld.c
.a为静态库,.so为共享库(动态库)
静态库的生成及调用:(1)首先编写一个.c文件add.c,内容如下:
int add(int x, int y) { return x+y; }
首先将其加-c选项编译为add.o文件:gcc -c add.c
(2)写一个add的头文件add.h,包含add的外部声名,内容如下:
int add(int, int);
(3)写一个主函数,test.c,内容如下:
#include <stdio.h> #include "add.h" //这里是注意点,不要忘了包含相关函数的头文件。 int main(void) { int sum = add(3, 4); printf("sum: %d\n", sum); return 0; }
gcc -c test.c 生成test.o
现在如果不用静态库其实已经可以用gcc -o app test.o add.o就可以生成可执行文件app了。
(4)生成静态库
ar crv libadd.a add.o
这样就生成了libadd.a静态库,*.a当然可以包含很多个*.o文件,这里方便演示只定了一个*.o文件。
(5)
gcc -o app test.o libadd.a
(注意*.a文件不能放*.o前面,这样子编译,*.a不一定要遵循命名格式)
或者
gcc -o app test.o -L. -ladd
(-L.表示除了搜索标准C语言库外还要搜索当前目录, 也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库)
动态库的生成及调用:
(1)首先编写一个.c文件add.c,内容如下:
int add(int x, int y) { return x+y; }
编译生成*.so动态库:gcc -fPIC -shared libadd.so add.c
(2)写一个主函数,test.c,内容如下:
#include <stdio.h> //#include "add.h" //动态库不需要有.h文件 int main(void) { int sum = add(3, 4); printf("sum: %d\n", sum); return 0; }
gcc -o app test.c libadd.so 生成app可执行文件或gcc -o app test.c -L. -ladd也行(-L.表示除了搜索标准C语言库外还要搜索当前目录,
也可以指定 -L/root/其它目录, -ladd 表明加载libadd.a库))。
如果运行app出现无法找到*.so文件,请把*.so拷到/usr/lib目录下即可。
- 静态库*.a和动态库*.so生成及调用
- Linux C:生成、调用静态库/动态库,.a,.so
- gcc生成.a.so静态库和动态库文件
- gcc生成.a静态库和.so动态库文件
- gcc生成.a静态库和.so动态库文件
- gcc 生成 .a静态库和 .so动态库
- gcc生成.a静态库和.so动态库文件
- c语言生成静态库.a和动态库.so
- Golang与C互用以及调用C的so动态库和a静态库
- Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a
- 动态库so和静态库a
- 静态库.a和动态库.so
- Linux生成动态库.so与生成静态库.a
- GCC生成.a静态库与.so动态库
- linux 静态库(.a)、动态库(.so)的创建生成和使用方法
- gcc生成.a静态库和.so动态库文件 (2012-08-19 00:27)
- Linux下生成静态库.a文件和动态库.so文件
- Android 静态和动态的调用so库(JNI)
- SQL Server 定时作业的制定
- Activity组件
- push, pop, min 都为O(1)的栈
- getopts 命令用法总结
- python调试第一战——PDB
- 静态库*.a和动态库*.so生成及调用
- 判断字段col是否为空或者是empty_blob()
- 国际域名转出与ICANN投诉流程(完结篇)
- 如何总结自己对某些技术的认识
- Android广播机制(两种注册方法)
- Trie树
- uC/OS-2 结构
- C++实现复数类
- VirtualAlloc,VirtualCopy和MmMapIoSpace