C++编译在编译静态库和动态库时,开不开编译优化(-o1 -o2 -o3) 对最终使用这些库的程序有影响吗
比如我使用了一个开源的库, 我的程序有两种编译方式, debug 模式, 会加上 -g 参数,
release 模式 我会开启-o2
那么我在编译第三方库的时候 也要同步加上-g 或者 -o2 吗
刚试了一下 在同一台机器上,编译protobuf 使用 CMAKE_BUILD_TYPE 分别为 release的debug编译出来的 不管是动态库还是静态库 还是 程序, 体积都不一样
盲猜编译第三方库应该要 开启优化的, 后面有时间 再测一下 不同模式下编译出来的库 的benchmark 看一下
1 kaedeair 2023-03-08 10:07:27 +08:00 这个不好说,要测试才知道,我现在有个程序就是静态编译下 debug 模式可以用,release 就会出错,如果用动态链接就没问题 现在也没搞清问题出在什么地方 |
2 yokyj 2023-03-08 10:08:54 +08:00 要的 |
![]() | 3 leimao 2023-03-08 10:13:25 +08:00 For performance, you should turn on optimization for building. |
![]() | 4 leimao 2023-03-08 10:15:21 +08:00 If the building optimization leads to an program error, then it's usually a compiler bug. |
5 duke807 2023-03-08 10:24:54 +08:00 via Android 不用一致 就连一个 c/cpp 文件内部,都可以做到某个函数优化等级与众不同 |
![]() | 7 newmlp 2023-03-08 10:29:55 +08:00 看编译器和平台,反正 Windows 下 debug 和 release 库不能混用,Linux 下 gcc 好像不区分 debug 和 release 应该没区别 |
![]() | 8 ysc3839 2023-03-08 10:34:36 +08:00 via Android 优化应该不影响,但是 debug 和 release 影响,因为 debug 和 release 会影响宏定义。 |
![]() | 9 AnroZ 2023-03-08 10:40:10 +08:00 开不开优化具体得看编译器和平台,开源代码我一般不开优化,自己写的代码 release 会 o2 。 |
![]() | 10 tool2d 2023-03-08 10:50:05 +08:00 我有项目正在用上古 C++编译器,最大只能开-o1, 如果开-o2 会导致 bug 。 珍惜生命,远离古老编译器,拥抱新时代的 clang 。 |
![]() | 12 tyzandhr 2023-03-08 12:25:10 +08:00 via Android 我想了想,name mangling 会变的地方估计就模板特化了吧。大概 release 和 debug 模式下生成的可能会不一样? |
![]() | 13 0littleboy 2023-03-08 14:39:13 +08:00 @kaedeair release 会优化代码,一般是 O2 ,O3 级别的 |