【问题标题】:Static linking against non-binary libs针对非二进制库的静态链接
【发布时间】:2015-05-18 17:43:19
【问题描述】:

我想在 OS X 上通过 Qt Creator 使用两个库 QCustomPlotEigen。 如果我只是将它们放入我的项目文件夹并将它们添加到项目中,则两者都不需要安装并且可以正常工作。它们不必安装,“您可以立即使用头文件”。

但是我希望它们比这更独立,位于项目之外以供其他项目使用,并且我不希望它们的头文件和源文件与我的项目文件一起出现。但我不知道如何静态链接它们。

  • INCLUDEPATH += /../../Eigen/Eigen \
  • 添加库... -> 外部库

显然不起作用,第二个是因为它们没有要打开的库文件。 我没有图书馆方面的经验,并且倾向于发现这个主题非常复杂。

【问题讨论】:

    标签: c++ qt static-libraries qt-creator static-linking


    【解决方案1】:

    对于模板,仅包含库 INCLUDEPATH 就足够了,如 cmets 中所述。通常,您可以通过手动修改 YourProject.pro 文件来做到这一点:

    LIBS += -L$$PWD/path_relative_to_pro_file/lib -lmylibfile1 -lmyflibfile2
    INCLUDEPATH += $$PWD/path_relative_to_pro_file/lib/include
    

    您的库文件名以 .lib 结尾。 如果您希望由于外部库更改而重新编译您的项目:

    DEPENDPATH += $$PWD/path_relative_to_pro_file/lib
    DEPENDPATH += $$PWD/path_relative_to_pro_file/lib/include
    

    【讨论】:

    • 但是 QCustomPlot 和 Eigen 的文件夹中都没有以 .lib 结尾的文件?
    • 嗯,TheMindWithin,你说的是静态链接。这通常意味着拥有.lib。但当然模板头包含库也是可能的。
    • QCustomPlot 例如确实有一个 .cpp 文件,而 Eigen 确实有像 'Core' 这样的文件而没有扩展名。我把它们都放在 usr 但 INCLUDEPATH += $$PWD/../../QCustomPlot 只是像之前建议的那样不起作用。 (ld:未找到架构 x86_64 的符号)
    • 哦,我明白了,在某些情况下,库二进制文件默认没有 .lib 扩展名。请查阅图书馆文档。然后您仍然可以在 LIBS 中引用这些文件,但您不能像使用 .lib 一样省略扩展名。
    • 好吧,这适用于 Eigen 但不适用于 QCustomPlot,因为它只是一个普通的 .h / .cpp 文件。我在这里做什么?
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2015-02-27
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多