【问题标题】:Conan library with both static and dynamic libraries具有静态和动态库的柯南库
【发布时间】:2021-02-13 04:03:41
【问题描述】:

我有一个项目使用 libusb 作为柯南依赖项。对于大多数编译(Windows 和 Linux),只使用静态库就足够了,但是对于从 Linux 到 OSX 的交叉编译这个项目,它需要 .dylib.a 文件。当我使用依赖项运行conan install 时,如果我将shared 属性设置为true,它会将--enable-shared --disable-static 附加到配置过程,如果我将其设置为false,它会设置--disable-shared --enable-static

在柯南有什么方法可以直接影响配置命令(我已经尝试过了,可以确保在库编译期间创建两个文件)。

【问题讨论】:

    标签: shared-libraries static-libraries cross-compiling libusb conan


    【解决方案1】:

    我最初开发了那个柯南包,从那以后社区对其进行了很多改进。

    简短的回答是否定的。为什么?开发柯南包是为了将所有项目的共享库与静态库分开。每个包都有一个特定的包 ID,它们在库方面没有混合。这是一个包装设计,而不是柯南的理智规则。

    如果您的项目同时使用这两个库,我会说确实有问题,应该加以修复,而不是寻找可能比修复实际问题花费更多时间的包解决方法。

    但是,如果您没有找到解决方案,有一个 hack,您可以使用 Deploy 生成器,将两个库下载到文件夹并从该文件夹配置您的项目使用。

    影响柯南使用相同的包参考,但它的设计不允许不同的选项。另一种选择是分叉原始项目并删除这些选项,并添加一个新选项“两者”,其中两者都存在。请记住,“两者”不会被接受为官方选项。

    【讨论】:

    • 我不得不说我不明白为什么在编译过程中要求 dylib 在同一个文件夹中...但是如果我只有静态库(.a),在链接过程中在最终项目的过程中,它找不到该库的符号。我也尝试只使用动态库(dylib)来编译项目,但它也失败了,因为它说文件是未知的。当我使用 .dylib 和 .a 时,它可以正常工作。老实说,从 Linux 到 MacOS 的交叉编译是一段疯狂的旅程。
    • 我曾经使用嵌入式 Linux 工作多年,但是从 Linux 到 OSX 的交叉构建听起来很有挑战性,我并没有尝试说实话。我的猜测是主机工具看起来 .a 和目标想要 .dylib
    • 另外,还有一个不错的柯南社区可以和你聊天。你也可以在那里找到一些嵌入式开发人员。访问cpplang-inviter.cppalliance.org并进入#conan频道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2011-08-28
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    相关资源
    最近更新 更多