V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bruce0
V2EX  ›  C++

C++库编译的一个问题

  •  
  •   bruce0 · 2023-03-08 10:02:35 +08:00 · 1986 次点击
    这是一个创建于 625 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    release 模式 我会开启-o2

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

    第 1 条附言  ·  2023-03-08 11:32:26 +08:00

    刚试了一下 在同一台机器上,编译protobuf 使用 CMAKE_BUILD_TYPE 分别为 release的debug编译出来的 不管是动态库还是静态库 还是 程序, 体积都不一样

    盲猜编译第三方库应该要 开启优化的, 后面有时间 再测一下 不同模式下编译出来的库 的benchmark 看一下

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

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

    珍惜生命,远离古老编译器,拥抱新时代的 clang 。
    yl4311629
        11
    yl4311629  
       2023-03-08 11:34:09 +08:00
    @kaedeair 有些库 debug 和 release 的 api 接口不一样
    tyzandhr
        12
    tyzandhr  
       2023-03-08 12:25:10 +08:00 via Android
    我想了想,name mangling 会变的地方估计就模板特化了吧。大概 release 和 debug 模式下生成的可能会不一样?
    0littleboy
        13
    0littleboy  
       2023-03-08 14:39:13 +08:00
    @kaedeair release 会优化代码,一般是 O2 ,O3 级别的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2705 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:35 · PVG 20:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.