linux 下编译,区分程序、库是debug还是release版本。同时以编译freetype为例

本文详细介绍了如何在Linux环境下区分程序的Debug和Release版本,通过使用readelf和gdb工具进行检查。同时,阐述了编译过程中-g选项的作用,以及在实际项目如freetype开源工具中如何配置编译选项来控制版本类型。

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


在linux里面怎么区分debug和realease版本
1、使用 readelf -S filename            //filename这里指的是你想要查看的程序,或者库
    如果是debug版本的话,你会看到很多debug相关的信息。
    如果是release版本的话,按理说是看不到debug信息的。//但是我使用交叉编译链编译程序后,会看见 .debug_frame
    注:因此,这种区分方式好像有一定的道理,具体怎样,后面还要去详查
2、使用 gdb filename                    //filename这里指的是你想要产看的程序,或者库
    如果是debug版本的话,最后会提示:Reading symbols from filename...done 相关信息    //filename这里指的是你想要产看的程序,或者库
    如果是release版本的话,最后会提示:no debugging symbols found
    注:这种区分方式应该比较靠谱。因为gdb需要调试相关的信息,如果不是debug版本,那么就提供不了相关的信息。


在linux里面编译debug和realease版本
在linux里面,使用编译器的时候,默认没有 -g 的选项,也就是默认编译成release版本。(目前我使用过的编译器都是这样,特殊的,暂时没有遇到)
如果想要编译debug版本的话,那么需要加入-g的选项。

举个例子:
    我在一直freetype这个开源工具的时候,我使用交叉编译链进行编译的时候,编译出来的竟然是debug版本。
    后面去根据信息找到了原因。是freetype这个开源工具的源代码,它里面有个配置文件。在编译之前会检测你的编译器是否支持-g选项,如果支持,那么它就给你加上了。
    顺带说一下这里怎么修改的:我使用的是: freetype-2.8.1 版本。在它的主目录下有个 builds/unix/  ,里面有一个configure文件。在里面搜索 CFLAGS="-g
    会有好几处都有这样的设置,我们想要release版本,那么就去掉-g选项。然后编译出来的就是release版本了
    注:1、因为我的目标板是arm,所以这里进入的是unix目录
        2、所有 CFLAGS="-g  这里只写了左边的引号,是因为还要 CFLAGS="-g -O2" 这样的存在。最稳妥的是搜索 -g 。只是这样搜索出来的太多了。

下面附录编译的过程,给自己留个备份:

1、获得压缩包后,解压压缩包,进入freetypr主目录
2、配置./configure  ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=$PWD/INSTALL --with-zlib=no --with-png=no
    注:这里需要指定自己的编译器等信息。
3、如果要更改为release版本,则去修改builds/unix/configure文件。 去掉 CFLAGS="-g..."  里面的 -g 选项
    如果不更改,第三步忽略。
4、进入freetypr主目录 执行 make
5、执行 make install
6、进入主目录下面的INSTALL/lib目录下。这个时候就能找到我们编译后生成的 freetype 库了。(动态和静态库都在这里)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

monkey_llll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值