|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
系统做了些什么,这需要时间去掌握,(背命令不是一件好的学习方法,相信我你一定会在你背完之前全部忘光),尽量掌握常用命令;
Linux下静态库文件的扩大名为".so"(SharedObject)。依照商定,一切静态库文件名的情势是libname.so(大概在名字中到场版本号)。如许,线程函数库被称作libthread.so。静态库的文件名情势是libname.a。共享archive的文件名情势是libname.sa。共享archive只是一种过渡情势,匡助人们从静态库变化到静态库。
本文仅以复杂的例子先容静态库文件的天生和链接办法。
操纵体系:Debian/GNULinux2.6.21-2-686;GCC版本:4.1.3
1、库文件及测试文件代码
库文件及测试文件地点的目次:/home/program/。
1.库文件名:myfunction.c
/*Author:Godbach
E-mail:nylzhaowei@163.com
*/
#include<stdio.h>
int
my_lib_function(void)
{
printf("Libraryroutinecalledfromlibmyfunction.so!
");
return0;
}
2.测试文件名:test.c
#include<stdio.h>
intmain(void)
{
my_lib_function();
return0;
}
2、静态库的编译办法
编译库文件myfunction.c:
debian:/home/program#gcc-shared-olibmyfunction.somyfunction.c
假如编译乐成,会在/home/program/下天生静态库文件:libmyfunction.so。
这里有两点必要申明:
1.对Linux操纵,一样平常都保举在一般用户形式下,假如必要超等用户的权限,则能够经由过程suroot,输出root用户暗码切换。我是团体进修利用,同时又有良多的操纵都要利用root用户,因而就间接在root用户下举行编译。
2.编译天生静态库的命令为:gcc(-fpic)-shared-olibmyfunction.somyfunction.c
-fpic使输入的工具模块是依照可重定位地点体例天生的。
-shared指定把对应的源文件天生对应的静态链接库文件。
3、静态库的测试办法
编译测试文件test.c:
debian:/home/program#gcc-otesttest.c/home/program/libmyfunction.so
乐成编译后,天生test文件,运转test:
debian:/home/program#./test
Libraryroutinecalledfromlibmyfunction.so!
个中,gcc-otesttest.c/home/program/libmyfunction.so的最初一个参数指定所链接库文件的相对路径。本例中库文件的相对路径为:/home/program/libmyfunction.so。
固然,假如想从体系的库文件路径(一般体系函数库的位于/usr/lib下)链接静态库的话,能够先将天生的库文件拷贝至/usr/lib/下,然后再链接:
debian:/home/program#cplibmyfunction.so/usr/lib/
debian:/home/program#gcc-otesttest.c-lmyfunction
debian:/home/program#./test
Libraryroutinecalledfromlibmyfunction.so!
这里,关于链接的办法作一下注释。关于gcc-otesttest.c-lmyfunction中最初一个参数-lmyfunction,可见传给C编译器的命令行参数并未提到函数库的完全路径名,乃至没有提到在函数库目次中该文件的完全名字!实践上,编译器原告知依据选项-lmyfunction链接到响应的函数库(/usr/lib下),函数库的名字是libmyfunction.so,也就是说,"lib"部分和文件的扩大名被省略了,但在后面加了一个l。
</p>
学习linux,就意味着更快的开发效率,等更多关于软件本身或者说操作系统本身的理解。 |
|