这一节主要来说一下在Linux中函数库的创建和使用。 函数库主要可以分为静态函数库(.a)和动态函数库(.so)。 函数库的常见位置:
/usr/lib/lib/usr/local/lib使用静态函数库,就是把函数代码直接内嵌到程序员所写的代码中。
1、将相对独立的功能形成函数,写入若干.c源文件中。
//function.c #include<stdio.h> void func(char p[]) { printf("func:%s\n",p); } //function.h void func(char p[]);2、将.c源文件编译成.o文件(gcc -c)
gcc -c function.c3、将.o文件打包成libfilename.a文件(ar rv)
ar rv libfunc.a function.o #打包成.a文件 man ar #查看帮助手册 ar tv libfunc.a #查看其中的.o文件4、在源文件中include函数的原型
//demo.c #include<stdio.h> #include"function.h" int main() { func("hello!"); return 0; }5、在源文件中调用函数 6、在链接时将libfilename.a作为输入,或是使用-L -l选项
gcc -c demo.c #编译 #链接 方法1:gcc -o demo demo.o libfunc.a 方法2:gcc -o demo demo.o -L. -lfunc #注意,-l后面的名字是去掉lib和.a后的名字 方法3:gcc --static -o demo demo.o -L. -lfunc #完全的静态链接 ./demo #执行系统调用不需要和任何程序链接。
动态函数库的优点是体积小,便于更新;缺点是有时候老版本的库会找不到了。
1、将相对独立的功能形成函数,写入若干.c源文件中 (同上,function.c,function.h) 2、gcc –fPIC –c 将.c源文件编译成.o文件
gcc -fPIC -c function.c3、gcc –shared 将.o文件生成libfilename.so文件
gcc -shared -o libfunc.so function.o4、在源文件中include函数的原型 5、在源文件中调用函数 6、在链接时使用,-L -l选项
gcc -o demo demo.o -L. -lfunc ldd demo #查看链接的结果但是会发现以下问题:链接成功,但是not found。
原因是,我们的函数库不在系统搜寻的目录中。 建议的方法:修改环境变量LD_LIBRARY_PATH。
export LD_LIBRARY_PATH=`pwd` echo $LD_LIBRARY_PATH #查看变量的值以上就是创建和使用函数库的一些方法了。