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 级别的
|