你能在qmake中指定exe的路径吗?

时间:2016-10-10 22:37:06

标签: qt qmake

让我们用linux来谈谈它。我有一个“.so”文件。我想使可执行文件依赖于它,在同一目录中查找它。你是如何通过q​​make做到的?或者这只能通过使用QLibrary来实现吗?

例如,当你有一个“.so”文件并希望在你的项目中使用它时,在qmake中你写道:

LIBS += -L"path to the folder that contains your .so" -lSoName

但正如你所看到的那样,路径是硬编码的,我想知道在那里写什么来使可执行文件在同一目录中查找“.so”。

2 个答案:

答案 0 :(得分:2)

您使用RPATH

您可以使用RPATH指令配置二进制文件或库以在当前目录中查找共享库(或dll),该指令在加载程序在运行时遵循的二进制本身中进行了修饰

1-在.pro文件中添加以下内容

unix {
        message("Adding RPATH to the app")
        QMAKE_LFLAGS    +=  -Wl,-rpath=\'\$$ORIGIN/\'
        QMAKE_RPATH     =
}

这会将可执行文件的RPATH设置为当前目录,并且您的可执行文件将首先尝试在当前目录中查找.so,然后在标准目录中查找(此过程将解释为here

2-编译并创建正确设置RPATH的二进制VERIFY后

objdump -x <path/to/binary> |grep RPATH

应该说$ORIGIN

编译时间配置:

CXXFLAGS += -L"/path/to/libmarylin.so/file" -lmarylin

答案 1 :(得分:1)

有几种方法可以做到这一点。

如果可执行文件在当前目录中,请执行LIBS += -L$$(PWD) -lSoName

如果您将可执行文件放入由某些qmake变量(如DESTDIR指定)的其他子目录中,请使用LIBS += -L$$(DESTDIR)(或任何包含该目录的变量)。

或者,您可以将包含可执行文件的目录添加到可执行文件的运行时路径中,这会为动态链接器提供一个目录列表,以便在运行时搜索任何未解析的库。这可以使用QMAKE_RPATHDIR += -L$$(PWD)LIBS += -lSoName完成,这将告诉链接器在运行qmake的当前目录中查找未解析的库。

默认情况下,某些操作系统还可能在库的运行时搜索路径中包含当前目录,在这种情况下,仅执行LIBS += -lSoName就足够了。但这取决于平台,而上述解决方案则不然。