我在linux下写了个C语言的程序,但是其中用了一些第三方的函数库。也就是说我的程序只有在安装了这些库的linux系统中才能运行。我现在的想法是在我编译自己的程序的时候就把这些第三防库编译到我的程序中,这样我就可以在没有安装这些库的linux操作系统上运行了。但是我不知道具体怎么做,我该看哪些资料呢?请给个思路,或者给个关键词也好。谢谢
不管什么库文件,你都既要在包含.h文件(不然编译通不过:有未声明的函数),也要在gcc选项里面指定.so文件的位置(不然链接通不过:未知的符号) 比如 gcc -I include_path -L lib_path -lyourlib include_path改成你头文件的目录 lib_path改成你动态库文件的目录 -lyourlib 改成l加上你要引用的库文件名字 比如libpthread.so就改成-lpthread
看这个第三方库是否提供了什么样的开发包支持:
举例,头文件名 abc.h 函数名为 abc_test(); 第三方库头文件目录为/abc/include/ 链接库目录为/abc/lib/1、头文件和源文件:这是最好的情况,引用头文件和相关函数即可。
如:
#include "abc.h"
abc_test();//直接调用即可
编译时,Makefile中加入编译选项 -I/abc/include 为了能将库的头文件引进来。
而且你的程序运行时,不再需要这个第三方库。
2、静态链接库:引用头文件和相关函数,设提供的静态库名为 libabc.lib
编译时,Makefile中加入 编译选项
1)-I/abc/include #编译时加,为了能将库的头文件引进来;
2)-L/abc/lib -labc #链接时加的
而且你的程序运行时,不再需要这个第三方库。
3、动态链接库,设动态链接库为libabc.so
调用动态链接库文件,需要dlopen等函数
编译时,Makefile中加入 编译选项
1)-I/abc/include #编译时加,为了能将库的头文件引进来;
2)-L/abc/lib -labc #链接时加的
注意:你的程序运行时,需要这个第三方库的libabc.so文件