Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux中检查库是调试的还是发布的_Linux_Gcc_Static Libraries - Fatal编程技术网

如何在Linux中检查库是调试的还是发布的

如何在Linux中检查库是调试的还是发布的,linux,gcc,static-libraries,Linux,Gcc,Static Libraries,我想检查编译后的库是调试模式还是发布模式 我找到了objdump--syms,但它似乎不起作用。我尝试了objdump--syms*.a | grep debugobjdump--syms*.a | grep release。但两者都不打印任何内容 如何在Linux中检查库的编译类型?严格来说,Linux中的库没有“调试”或“发布”模式这样的概念gcc可以生成带有或不带有调试符号的库,这些符号以后可以由gdb调试器使用,也可以生成带有或不带优化的库。调试符号输出由编译任何单元时传递给gcc的选项

我想检查编译后的库是调试模式还是发布模式

我找到了
objdump--syms
,但它似乎不起作用。我尝试了
objdump--syms*.a | grep debug
objdump--syms*.a | grep release
。但两者都不打印任何内容


如何在Linux中检查库的编译类型?

严格来说,Linux中的库没有“调试”或“发布”模式这样的概念
gcc
可以生成带有或不带有调试符号的库,这些符号以后可以由
gdb
调试器使用,也可以生成带有或不带优化的库。调试符号输出由编译任何单元时传递给gcc的选项
-g
控制,优化由不同优化级别的标志
-O1
-O2
-O3
控制

假设您想知道库是否包含调试符号,那么您已经为它运行了正确的命令:
objdump--syms*.a | grep debug
通常为包含调试符号的对象生成非空输出。通过“release”字过滤输出不会提供任何关于库的编译方法的信息,因为没有“release”一词


另外,请注意,许多开放源代码库都是分布式编译的,同时启用了调试符号和优化,因此在某种程度上混合了被认为是“调试”和“发布”的内容。

不要忘记
-DNDEBUG
。发布版本应包括
-DNDEBUG
,以便删除调试和诊断。否则,断言(如果存在并触发)将导致程序或库崩溃,而不是简单地返回失败。更妙的是,核心文件(包含您的密码和比特币钱包的私钥)可能会交付给平台提供商和编写应用程序的开发人员。在断言后更改密码和密钥。当硬币很容易被过滤掉的时候,谁还需要挖掘它们呢。。。