C++库编译的一个问题

2023-03-08 10:02:35 +08:00
 bruce0

C++编译在编译静态库和动态库时,开不开编译优化(-o1 -o2 -o3) 对最终使用这些库的程序有影响吗

比如我使用了一个开源的库, 我的程序有两种编译方式, debug 模式, 会加上 -g 参数,

release 模式 我会开启-o2

那么我在编译第三方库的时候 也要同步加上-g 或者 -o2 吗

2027 次点击
所在节点    C++
13 条回复
kaedeair
2023-03-08 10:07:27 +08:00
这个不好说,要测试才知道,我现在有个程序就是静态编译下 debug 模式可以用,release 就会出错,如果用动态链接就没问题
现在也没搞清问题出在什么地方
yokyj
2023-03-08 10:08:54 +08:00
要的
leimao
2023-03-08 10:13:25 +08:00
For performance, you should turn on optimization for building.
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.
duke807
2023-03-08 10:24:54 +08:00
不用一致

就连一个 c/cpp 文件内部,都可以做到某个函数优化等级与众不同
newmlp
2023-03-08 10:28:00 +08:00
@kaedeair debug 可用 release 出 bug ,显然是代码写的有问题啊
newmlp
2023-03-08 10:29:55 +08:00
看编译器和平台,反正 Windows 下 debug 和 release 库不能混用,Linux 下 gcc 好像不区分 debug 和 release 应该没区别
ysc3839
2023-03-08 10:34:36 +08:00
优化应该不影响,但是 debug 和 release 影响,因为 debug 和 release 会影响宏定义。
AnroZ
2023-03-08 10:40:10 +08:00
开不开优化具体得看编译器和平台,开源代码我一般不开优化,自己写的代码 release 会 o2 。
tool2d
2023-03-08 10:50:05 +08:00
我有项目正在用上古 C++编译器,最大只能开-o1, 如果开-o2 会导致 bug 。

珍惜生命,远离古老编译器,拥抱新时代的 clang 。
yl4311629
2023-03-08 11:34:09 +08:00
@kaedeair 有些库 debug 和 release 的 api 接口不一样
tyzandhr
2023-03-08 12:25:10 +08:00
我想了想,name mangling 会变的地方估计就模板特化了吧。大概 release 和 debug 模式下生成的可能会不一样?
0littleboy
2023-03-08 14:39:13 +08:00
@kaedeair release 会优化代码,一般是 O2 ,O3 级别的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/922123

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX