修复是install_name_tool
在将库添加到主应用程序项目之前在库本身上使用。看,我出错的地方是尝试在应用程序(LibraryTester)而不是dylib上执行此操作。
为了修复,我跑了:
install_name_tool -id @loader_path/mycustom.1.dylib mycustom.1.dylib
在自定义 dylib 文件上。@loader_path
翻译为“主应用程序的同一目录” 。因此,在您的 .app 文件夹中,这将是Contents/MacOS
.
如果你愿意,你可以用它来切换它@rpath
,那将转换为Contents/Frameworks
.
这使您可以在每次编译主应用程序时进行动态测试。看,有些东西直到你双击 .app 文件夹来启动你的应用程序才会出现。当然,您可能能够从命令行运行您的应用程序及其相关的 dylib,并且您可能能够从 Qt Creator 内部运行它,但是在极少数情况下,在您双击之前某些事情可能不会作为问题出现.app 文件夹。
现在,这为您提供了一个临时解决方案,这样您在双击 .app 文件时无需继续执行命令行操作以使您的 dylib 与可执行文件一起工作。但是,当您准备好将此项目投入生产时,您应该使用命令macdeployqt
。
现在,对于 MacOS 上的 Qt/C++,这是您可能不知道的另一个技巧。您可以将以下内容添加到您的 .pro 文件中,它会自动将您的 dylib 文件复制到与可执行文件相同的目录中(在我的示例中为 LibraryTester):
mac {
Resources.files += mycustom.1.dylib
# you can put more of these as you need, and it can even copy folders
# Resources.files += blah blah
Resources.path = Contents/MacOS
QMAKE_BUNDLE_DATA += Resources
}