当前位置: 技术问答>linux和unix
请教Linux下C开发,怎么做成库文件,又怎么引用这个库文件?
来源: 互联网 发布时间:2016-07-11
本文导语: 谢谢。 | 通常做成共享库的话,在编绎时加上-shared参数,并把链接生成的文件名命名libxxx.so,可以放在/usr/lib下 其他程序引用这个库时,在链接的时候加上-lxxx就可以了。 | 就是这样...
谢谢。
|
通常做成共享库的话,在编绎时加上-shared参数,并把链接生成的文件名命名libxxx.so,可以放在/usr/lib下
其他程序引用这个库时,在链接的时候加上-lxxx就可以了。
其他程序引用这个库时,在链接的时候加上-lxxx就可以了。
|
就是这样的了 楼主试试
|
编辑好代码以后,编译时采用类似下面的命令可生成"共享库"(假如源文件是myfun.c):
gcc -shared -fPIC -Wmyfun.c -0 libmy.so
解释: -shared 生成共享库;
-fIPC 表示“位置无关代码”(Position Independent Code),可不加;
-W 表示输出警告信息,可不加;
库文件的命名要按照libxxxx.so的格式;
要引用这个库时:
gcc xxx.c -0 xxx.out -lmy
-l 表示设定要连接的库(libmy.so,输my便可)
gcc -shared -fPIC -Wmyfun.c -0 libmy.so
解释: -shared 生成共享库;
-fIPC 表示“位置无关代码”(Position Independent Code),可不加;
-W 表示输出警告信息,可不加;
库文件的命名要按照libxxxx.so的格式;
要引用这个库时:
gcc xxx.c -0 xxx.out -lmy
-l 表示设定要连接的库(libmy.so,输my便可)
|
动态库还是静态库
静态库方法:
文件名:lib.c
先编译成目标文件 gcc -o mylib.o -c lib.c
然后创建静态库,将mylib.o放到libmylib.a中 ar rcs libmylib.a mylib.o
最后copy到库目录下/usr/lib cp libmylib.a /usr/lib/libmylib.a
在编写的时候直接调用其中的函数就是了,只不过在编译的时候要加入-l选项后面跟上库名
如 gcc -o test test.c -lmylib //mylib是前面创建的库的名称
动态库 创建就是 gcc -fPIC -share -o mylib.so lib.c
调用也分两种方法
1是 gcc -o test test.c ./libmylib.so //注意这里跟的是动态库的路径
第二种是使用动态库的函数 你man dlopen看下那几个函数看下就知道了就不多说了
静态库方法:
文件名:lib.c
先编译成目标文件 gcc -o mylib.o -c lib.c
然后创建静态库,将mylib.o放到libmylib.a中 ar rcs libmylib.a mylib.o
最后copy到库目录下/usr/lib cp libmylib.a /usr/lib/libmylib.a
在编写的时候直接调用其中的函数就是了,只不过在编译的时候要加入-l选项后面跟上库名
如 gcc -o test test.c -lmylib //mylib是前面创建的库的名称
动态库 创建就是 gcc -fPIC -share -o mylib.so lib.c
调用也分两种方法
1是 gcc -o test test.c ./libmylib.so //注意这里跟的是动态库的路径
第二种是使用动态库的函数 你man dlopen看下那几个函数看下就知道了就不多说了
|
UP
|
学习了
|
我们知道.a文件就是几个.o文件合在一起用于静态链接.
假设我们有如下四个文件
view plaincopy to clipboardprint?
/**********************************
*文件main.c
***********************************/
#include
int main()
{
F1();
F2();
F3();
printf("An");
printf("Bn");
return 0;
}
/****************************************
*文件file1.c
*****************************************/
void F1()
{
printf("F1n");
}
/****************************************
*文件file2.c
*****************************************/
void F2()
{
printf("F2n");
}
/****************************************
*文件file2.c
*****************************************/
void F3()
{
printf("F3n");
}
/**********************************
*文件main.c
***********************************/
#include
int main()
{
F1();
F2();
F3();
printf("An");
printf("Bn");
return 0;
}
/****************************************
*文件file1.c
*****************************************/
void F1()
{
printf("F1n");
}
/****************************************
*文件file2.c
*****************************************/
void F2()
{
printf("F2n");
}
/****************************************
*文件file2.c
*****************************************/
void F3()
{
printf("F3n");
}
分别用用命令gcc –c main.c
Gcc –c file1.c
Gcc –c file2.c
Gcc –c file3.c
可以生成四个.o文件,分别是mian.o file1.o file2.o file3.o
然后用ar –r lib.a main.o file1.o file2.o file3.o
即可以生成一个lib.a 的打包文件.
如果要编译代码,我们可以用命令gcc –o test lib.a
即可以生成一个test.exe 的可执行文件
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wxdcxp/archive/2009/10/08/4641898.aspx
|
学习下。
|
不错
|
基本方法就是这样。