linux下安装非标准库为写程序

本文详细介绍了在Linux环境下安装非标准库(如openCV,ffmpeg)的步骤和原理,包括头文件的位置、库文件的链接,以及解决编译链接时遇到的问题。通过理解库的分类和gcc的编译选项,如-I、-L和-l,可以成功安装自定义库。文章还通过创建并使用动态库和静态库的例子,演示了编译和链接过程,强调了pkg-config工具在处理库依赖时的重要性,并讲解了设置PKG_CONFIG_PATH环境变量的方法。" 132820680,19453851,麻雀搜索算法SSA在最优目标求解中的应用,"['人工智能', '算法', '优化', 'MATLAB']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       最近一直在琢磨怎么在linux下装开源库,像openCV,ffmpeg等等!这么好的开源库,想基于这些做些开发,可是当我们使用的时候就出现了各种问题。编译时什么头文件没包含进来,什么库没找到啦!等等,这些问题让你觉得很苦恼,也是阻止你前进的障碍。我花了好久才把这些库文件装起来。下面开始讲讲我的经验吧,以后不管什么库就可以装了。

    要想会装任何库,就必须懂得原理!

    库有标准库和飞标准库。标准库就是收集所有符合标准的头文件以及常用的函数程序组成的一个文件库。像c/c++标准库,你用这些库文件编程时你不用管怎么编译链接的,你只要敲上gcc ***.C -O ***就行了。gcc会自动实现编译链接然后形成可执行程序。这背后到底是怎么运行的呢?

1,头文件位置

  gcc默认会在/usr/include目录下寻找头文件,这是标准库的头文件的路径,但非标准的库一般不会把头文件直接放在该目录下,一般的作法是在该目录下创建一个自己的目录,然后在此目录下直接或分门别类放自己的头文件。如果是这样,gcc编译时是不会找到这些头文件的,我们会看到有“×××: No such file or directory”的出错信息。解决的方法就是用gcc的-I选项列出这些非标准的路径(实际编程当中一般是由pkg-config --cflags 完成这一工作的)。

2,库文件位置

gcc默认会链接标准c语言库,但如果所用的库是“舶来品”,gcc自然不会自动链接,如果也没有显式链接的话,在链接阶段就会出现诸如“: undefined reference to `gtk_container_set_border_width'/tmp/ccvHaxUx.o(.text+0x1af): In function `main':”的错误。 解决的方法就是利用gcc的-l参数显式链接需要链接的库。这样gcc就会按照一种特定的命名规则到默认的目录(/usr/lib和/lib等目录)下去寻找这些库,并自动链接。但如果库放在自己的定义的目录下,gcc还是不能找到的,这种情况下可以用gcc -L来列出非标准库的路径。(实际编程中这一工作是由pkg-config --libs完成的)

举个例子:(自己创建一个库)创建文件hello.c,内容如下:
#include <stdio.h>
void hello(void)
{
printf("Hello World/n");
}
编译生成动态库的命令为:gcc (-fpic) -shared -o libmyfunction.so myfunction.c
-fpic 使输出的对象模块是按照可重定位地址方式生成的。
-shared指定把对应的源文件生成对应的动态链接库文件。

用命令gcc -shared hello.c -o libhello.so编译为动态库。可以看到,当前目录下多了一个文件libhello.so。
[leo@leo test]$ file libhello.so
libhello.so: E

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值