【问题标题】:Linux C++ library contains different GCC compilation versionsLinux C++ 库包含不同的 GCC 编译版本
【发布时间】:2015-01-16 16:33:21
【问题描述】:

感谢How to retrieve the GCC version used to compile a given ELF executable?,我可以检查我新建的 C++ 库的 GCC 编译版本,它为我提供了以下信息:

GCC: (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7
GCC: (Debian 4.4.5-8) 4.4.5

似乎 C++ 库包含不同的 GCC 编译版本。我知道原因,这是因为创建最终库所需的一个库来自第三方库,它是二进制的,不提供源代码。所以我的问题是:在这种情况下我可以安全地释放库吗?还是我应该获取第三方的源代码并使用一个 GCC 编译器构建所有代码?谢谢。

【问题讨论】:

    标签: c++ linux gcc g++


    【解决方案1】:

    如果您在编译代码时成功地使用了库二进制文件,则没有技术理由需要再次构建它的源代码。如果该库与您当前的构建环境不兼容,则依赖于二进制文件的代码将无法编译。 (或者如果包含正确的 soname/version 检查,则不应在没有警告的情况下编译)

    也就是说,库是二进制文件而不是与源代码一起分发可能是有原因的。这是您需要检查是否存在与使用库二进制文件相关的legal 要求,您需要在发布库之前遵守该要求。 注意这是一个法律问题,而不是技术问题。查找二进制文件随附的ReadmeLicense 文件,并确定是否有任何许可证与其关联。它可能会提供指向其特定最终用户许可协议 (EULA) 的链接,也可能会将您引导至标准软件许可协议(即 Creative-Commons、GPLv3 等...)

    如果您的项目是一个商业项目,那么在发布您的库之前确保合规性是值得的。 (知识产权诉讼非常昂贵......)

    【讨论】:

    • “如果库与您当前的构建环境不兼容,则依赖于二进制文件的代码将无法编译”:事实并非如此:ABI 不兼容(例如符号版本控制未正确处理) ) 可能导致运行时崩溃,在编译/链接时无法检测到。
    • 好的,如果没有soname/version检查等等,那么你可能会遇到问题。那是一个极端案例或糟糕的 lib 案例。我会合格的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多