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