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


在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 库了。(动态和静态库都在这里)

猜你喜欢

转载自blog.csdn.net/a3121772305/article/details/88075636