【问题标题】:Qmake and passing $ORIGIN to linker option -rpathQmake 并将 $ORIGIN 传递给链接器选项 -rpath
【发布时间】:2011-09-21 21:24:55
【问题描述】:

我想使用 -rpath 链接器选项来设置 .so 搜索路径。我希望它搜索[app_path]/../lib。我已经尝试将此添加到我的 qmake .pro 文件中:

QMAKE_LFLAGS += -Wl,-rpath=$ORIGIN/../lib/

但是 qmake 以这种方式链接我的项目:

g++ -Wl,-rpath=RIGIN/../lib/ -Wl,-O1 -o myoutput main.o [...]

我怎样才能逃脱$ORIGIN

【问题讨论】:

    标签: qmake


    【解决方案1】:

    我找到了here 一种正确逃避它的方法:

    QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN/../mylibs\'' 
    

    【讨论】:

    • 我只是想我会提到我必须添加 -z origin 才能让事情为我工作。总之,就是QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN/../lib\',-z,origin'
    • 这是正确答案。我无法让 QMAKE_RPATHDIR 工作,并且网络上有喋喋不休的消息表明 QMAKE_RPATHDIR 确实不起作用。
    【解决方案2】:

    如果您希望在构建时(正确)评估 $ORIGIN,您可以简单地将其添加到您的 .pro 文件中:

    QMAKE_RPATHDIR += $ORIGIN/../mylibs
    

    【讨论】:

    • 有趣。这是一个新选项吗?
    • 我在尝试使 QMAKE_RPATH 工作时在这里发现了它:QTBUG-8110。根据此链接QMAKE_RPATHQMAKE_LFLAGS_RPATH 不再工作。 QMAKE_RPATHDIR 至少适用于 Qt 4.8.4 和 Qt 4.8.5。
    • 这里定义:qmake Variable Reference
    • 我在 Qt 5.3-5.5 中尝试过,但它不能正常工作。
    • @Aurelien 我自己的答案是 5 年前的,我不知道它是否仍然有效。我不确定该怎么做。
    【解决方案3】:

    这是一个非常古老的问题,但对于通过搜索到达这里的人来说:不再需要旧答案中描述的方法。现代 Qt 版本(在我的例子中是 5.9),允许你使用这个:

    QMAKE_RPATHDIR += lib
    

    这将自动将所需的条目(包括$ORIGIN-Wl,-z,origin 在需要的地方)添加到makefile,只要您使用的是相对目录。这意味着lib 将产生所需的“来源”条目,而像/lib 这样的东西不会。您添加到QMAKE_RPATHDIR 的任何相对目录都将自动相对于$ORIGIN

    【讨论】:

      【解决方案4】:

      美元=$

      QMAKE_LFLAGS += -Wl,-rpath=$${DOLLAR}$${DOLLAR}ORIGIN/../myLibs

      【讨论】:

        猜你喜欢
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-13
        • 1970-01-01
        • 1970-01-01
        • 2021-12-13
        相关资源
        最近更新 更多