macos qt 如何正确在pro文件中利用@loader_path链接dylib
时间: 2024-03-10 17:48:09 浏览: 99
在 macOS 上,可以使用 `@loader_path` 来指定 dylib 的路径,这样就可以避免在不同机器上使用时需要修改 dylib 的路径。以下是一个示例 `.pro` 文件:
```
QT += core
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp
# 添加 dylib 的路径
QMAKE_LFLAGS += -Wl,-rpath,@loader_path/../Frameworks
# 链接 dylib
QMAKE_LFLAGS += -lmylib
# 将 dylib 复制到 Frameworks 目录下
# 注意,这里的路径应该是相对于生成的二进制文件的路径
macx {
DESTDIR = $$PWD/build-$(TARGET)-Desktop_Qt_$(QT_VERSION_MAJOR).$(QT_VERSION_MINOR).$(QT_VERSION_PATCH)/$(CONFIG)/$(TARGET).app/Contents
QMAKE_POST_LINK = install_name_tool -change libmylib.dylib @loader_path/../Frameworks/libmylib.dylib $(DESTDIR)/MacOS/MyApp
QMAKE_BUNDLE_DATA += libmylib.dylib
}
```
在 `QMAKE_LFLAGS` 中使用 `-Wl,-rpath,@loader_path/../Frameworks` 来指定 dylib 的路径。其中 `@loader_path` 表示当前二进制文件所在的路径,`../Frameworks` 表示在当前目录的上一级目录下的 `Frameworks` 目录。
在 `QMAKE_POST_LINK` 中使用 `install_name_tool` 命令来修改生成的二进制文件中 dylib 的路径,将 `libmylib.dylib` 修改为 `@loader_path/../Frameworks/libmylib.dylib`。这样,在运行时就可以在 `Frameworks` 目录下找到所需要的 dylib。
最后,使用 `QMAKE_BUNDLE_DATA` 将 dylib 复制到 Frameworks 目录下。注意,这里的路径应该是相对于生成的二进制文件的路径。
阅读全文