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

关于 boost、Qt 和跨平台

  •  
  •   auto8888 · 2020-03-10 10:15:16 +08:00 · 5897 次点击
    这是一个创建于 1749 天前的主题,其中的信息可能已经有所发展或是发生改变。
    新人发帖,原来在公司用 Qt 框架做了一个跨 windows linux 和 arm linux 的车载软件(无界面),现在准备做成产品,量产,几百套吧,领导不让用 Qt,要改成 C++的。
    后面想到 boost 库也是跨平台的,也有文件系统、字符、线程、定时器、TCP UDP 这些,想着应该比自己造轮子来的稳定吧,那么 boost 好用吗,坑多吗,请教下各位大佬。
    36 条回复    2020-03-11 18:18:45 +08:00
    nightwitch
        1
    nightwitch  
       2020-03-10 10:26:08 +08:00   ❤️ 1
    好用,坑多。
    newmlp
        2
    newmlp  
       2020-03-10 11:15:40 +08:00
    Qt 不就是 C++写的跨平台框架吗
    augustheart
        3
    augustheart  
       2020-03-10 11:26:19 +08:00
    qt 不就是 c++的么……不用 qt 你们用啥做界面?
    大致理解了一下意思,你们的内核不使用 qt ?
    至于 boost……如果你想要拿它替代 qt 这种大而全的框架是做不到的。boost 充其量就是个标准库++。而且一旦用了 boost,啧啧,就和传染病似的……
    wangsongyan
        4
    wangsongyan  
       2020-03-10 11:28:47 +08:00   ❤️ 1
    不让用 Qt,要改成 C++的
    augustheart
        5
    augustheart  
       2020-03-10 11:29:18 +08:00
    @augustheart 哦,我瞎了,没看到无界面三个字……
    shawnsh
        6
    shawnsh  
       2020-03-10 11:53:49 +08:00 via Android
    肯定有坑,确实比 qt 的好一些,如果不上界面的话
    mnssbe
        7
    mnssbe  
       2020-03-10 12:06:53 +08:00
    @newmlp qt 商业授权要交钱的
    wbing
        8
    wbing  
       2020-03-10 12:28:18 +08:00 via iPhone
    文件系统、字符、线程、定时器、这些 STL 本身就有,交叉编译 boost 估计问题不少,
    terryching
        9
    terryching  
       2020-03-10 12:36:25 +08:00 via Android
    可以考虑下 POCO,容易理解一点,当然坑也不少
    no1xsyzy
        10
    no1xsyzy  
       2020-03-10 12:36:54 +08:00
    @mnssbe 你仍然可以以 GPL 提供给你的用户,因为你很放心你的用户不太理解自己有再分发的权利,即使你只需明确声称自己采用 GPL 发布,但听不懂的人就是听不懂。另一种情况是,“我买的东西为什么要免费再送给别人?”。
    liukun1212
        11
    liukun1212  
       2020-03-10 12:49:08 +08:00
    不建议用 boost,坑太多了。出了问题无从下爪,折腾的时间都够自己造轮子了。
    Chenamy2017
        12
    Chenamy2017  
       2020-03-10 13:19:37 +08:00
    直接上标准 C++,有些轮子造起来可能比你用他们的还香。
    zjsxwc
        13
    zjsxwc  
       2020-03-10 13:31:17 +08:00
    换 golang 不是跟简单
    Harv
        14
    Harv  
       2020-03-10 13:34:33 +08:00
    我跟你们讲,Qt 商业化版权费贼贵。
    newmlp
        15
    newmlp  
       2020-03-10 13:45:26 +08:00
    @mnssbe 为啥要商业授权啊,又不用动 Qt 源码
    tomychen
        16
    tomychen  
       2020-03-10 13:50:57 +08:00
    如果不是重度依赖,这种跨平台+硬件,最好还是标准撸
    auto8888
        17
    auto8888  
    OP
       2020-03-10 14:37:06 +08:00
    @terryching 粗略看了一下这个库貌似简单点,boost 全是模板,好难。比如网上一个获得文件夹大小的代码
    namespace fs = boost::filesystem;
    boost::uintmax_t dir_size(const fs::path &p)
    {
    return std::accumulate(
    boost::make_transform_iterator(&fs::file_size, fs::recursive_directory_iterator(p)),
    boost::make_transform_iterator(&fs::file_size, fs::recursive_directory_iterator()),
    static_cast<boost::uintmax_t>(0));
    }
    编译出错了,根本不知道怎么改
    mnssbe
        18
    mnssbe  
       2020-03-10 15:41:01 +08:00
    @no1xsyzy 你的产品源码发布了客户看不懂,友商也看不懂? 如果声称 GPL 发布那就厉害了

    @newmlp 你打算商用闭源就要授权
    wangxkww
        19
    wangxkww  
       2020-03-10 16:39:27 +08:00
    Qt 的 LGPL 为啥商用闭源就需要授权?
    paoqi2048
        20
    paoqi2048  
       2020-03-10 16:49:33 +08:00
    你们公司该不会是害怕违反许可协议吧? Qt 有 LGPL 的呀,只要不对源码进行二次开发就没问题
    leon0903
        21
    leon0903  
       2020-03-10 17:08:35 +08:00
    为什么不用 qt 呢? qt 不也是 C++么。
    xsen
        22
    xsen  
       2020-03-10 17:32:11 +08:00
    对于 Qt,只要不修改源代码并且动态链接,是完全可以发布编译好的库的,也可以和闭源软件一同发布,这是没有问题的。

    在这个用例之下,LGPL 的重点在于:
    1、不修改源码
    2、动态链接
    3、不修改 Qt 库的分发版权,并提供原有的版权声明
    laminux29
        23
    laminux29  
       2020-03-10 17:33:49 +08:00
    不考虑性能问题,为啥不用 javafx ?开发效率比 C++高一个数量级。

    如果考虑性能,一定要用 C++,建议界面 wxWidgets,通信 thrift,其他小工具用 boost。
    hhhsuan
        24
    hhhsuan  
       2020-03-10 17:38:11 +08:00 via Android
    Qt 不是做界面的吗,跟 boost 这种通用库有啥可比性?
    livepps
        25
    livepps  
       2020-03-10 17:41:20 +08:00 via Android
    boost 你用到的接口加一层封装,如果出问题,就自己重写实现,一般也不会出什么问题。
    turi
        26
    turi  
       2020-03-10 17:51:25 +08:00
    boost 基本上都有例子吧,为什么要去网上搜例子呢?
    boost 更新迭代快,看官方例子就行了。
    newmlp
        27
    newmlp  
       2020-03-10 17:54:23 +08:00
    @mnssbe 商用不需要授权,只要你不改 Qt 源码就行了
    newmlp
        28
    newmlp  
       2020-03-10 17:56:49 +08:00
    @hhhsuan Qt 不仅仅是做界面的,还包含了一套跨平台的库,包括网络,数据库,容器。。。。等等
    mnssbe
        29
    mnssbe  
       2020-03-10 18:01:04 +08:00 via iPhone
    @newmlp 嗯 不修改,动态链接
    auto8888
        30
    auto8888  
    OP
       2020-03-11 10:17:27 +08:00
    @leon0903 我也这么觉得的,老板不让用有锤子办法,我就一打工仔
    auto8888
        31
    auto8888  
    OP
       2020-03-11 10:25:31 +08:00
    @turi 确实,不过有一点不爽的是,boost 一定要 try catch 吗,比如就一个 boost::filesystem::remove 都能把整个程序崩了,凭啥有那么高优先级啊,返回 false 不就完了么
    no1xsyzy
        32
    no1xsyzy  
       2020-03-11 15:20:15 +08:00
    @mnssbe 其实说真的,如果有哪块领域,因为发个源代码就能有差的,那你也根本不差钱买 Qt 商业授权。
    其他纯粹自个儿揪自个儿头发——自找秃的。
    多少免费软件就 TM 喜欢搞这种事,别人拿去卖了就大呼小叫,纯粹自己多事儿,跟你、你的真正的用户,有关系吗?别人坑了多少傻子钱,那些钱本来难道会进你腰包吗?还可以说是对经济学和所有权概念认识不清,没那本事排他就别主张独占。
    我喜欢的故事就是那个,小偷偷了神父的钱,警察抓到了,神父却说 “那是我送他的”。
    ysc3839
        33
    ysc3839  
       2020-03-11 17:19:21 +08:00
    @auto8888 C++ 标准库里也有很多是会 throw 的呀?

    另外,标准库里面的 filesystem 可以自己传个变量进去获取错误,不会 throw。
    https://zh.cppreference.com/w/cpp/filesystem/remove
    mnssbe
        34
    mnssbe  
       2020-03-11 17:39:46 +08:00
    @no1xsyzy 你开心就好
    turi
        35
    turi  
       2020-03-11 17:50:45 +08:00
    @auto8888

    个人感觉 c++就是缺乏崩溃的异常,其余的还好,

    现在开源库基本上都用异常,而不用 c 语言那套
    LANB0
        36
    LANB0  
       2020-03-11 18:18:45 +08:00
    C++17 不就差不多够用? boost 神坑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.