函数库有静态库和动态库两种:
静态库是一系列的目标文件(.o)的归档文件,文件名为libname.a(如果自己写libmyself则库名就为lmyself)。如果在编译某个程序时链接静态库,则链接器将会搜索静态库,从中提取出它需要的目标文件并直接复制到该程序的可执行二进制文件(ELF格式文件)之中;
动态库【.主版本号.次版本号.发行号】。在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入。
生成静态库步骤:
用-c生成.o文件(用.o文件来生成库文件。包含静态库和动态库)。
#gcc –c unsgn_pow.c
通过.o文件生成静态库文件
#ar rcsv libmytest.a unsgn_pow.o
通过生成的静态库文件进行对测试程序的导入并运行。(注意最后一个库名跟上面的相似之处)
#gcc –o pow_test pow_test.c –L . –lmytest (如果上面库文件名写成libmy.a 则这边应写成-lmy)
最后运行程序
#./pow_test 2 10
生成动态库步骤
用-fPIC –Wall -c生成.o文件
#gcc –fPIC –Wall –c unsgn_pow.c
通过.o文件以及-shared –o (库名)生成动态库文件
#gcc –shared –o libmytest.so unsgn_pow.o
通过生成的动态库文件编译测试程序
#gcc –o pow_test pow_test.c –L . –lmytest
在运行可执行程序之前,需要注册动态库的路径名。方法有:
修改/etc/ld.so.conf文件,之后还要运行# ldconfig 。
//
ld.so.conf 文件包含一个所有目录(/lib 和 /usr/lib 除外,它们会自动包含在其中)的清单,动态装入器将在其中查找共享库。
ld.so.cache
在动态装入器能“看到”这一信息之前,必须将它转换到 ld.so.cache 文件中。可以通过运行 ldconfig 命令做到这一点:
# ldconfig
当 ldconfig 操作结束时,您会有一个最新的 /etc/ld.so.cache 文件,它反映您对 /etc/ld.so.conf 所做的更改。从这一刻起,动态装入器在寻找共享库时会查看您在 /etc/ld.so.conf 中指定的所有新目录。
//
或者修改LD_LIBRARY_PATH环境变量,或者将库文件直接复制到/lib或者/usr/lib目录下
#cp libmytest.so /lib
运行程序
#./pow_test 2 10