dylib库路径并在应用程序

时间:2015-11-23 14:54:17

标签: macos osx-elcapitan dylib otool install-name-tool

我想在Mac OS X El Capitan(10.11.x)中创建一个库,并在qt creator的另一个应用程序中使用它,所以我在qt中用这个设置创建了一个简单的库:

QT       -= gui
TARGET = /System/Library/Frameworks/MyFrm.framework/dylib/DynminLinkingLib
TEMPLATE = lib

正如您所看到的,我在MyFrm框​​架中创建了“DynminLinkingLib”库;之后我创建了一个Qt应用程序来使用该库。

QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = SampleProject
TEMPLATE = app
macx: LIBS += -L/System/Library/Frameworks/MyFrm.framework/dylib -lDynminLinkingLib.1.0.0
INCLUDEPATH += /System/Library/Frameworks/MyFrm.framework/include

当我在qt中运行我的应用程序时,它给了我这个错误:

dyld: Library not loaded: libDynminLinkingLib.1.dylib
  Referenced from: /Users/mac/Src/dll/DynamicLinking/build-SampleProject-Desktop_Qt_5_5_0_clang_64bit-Debug/SampleProject.app/Contents/MacOS/SampleProject
  Reason: image not found
The program has unexpectedly finished.

为了解决Qt项目中的这个错误,我将DYLD_LIBRARY_PATH变量设置为/System/Library/Frameworks/MyFrm.framework/dylib并且它运行良好,但是当我运行bundle应用程序时它不起作用并且给我这个错误:

enter image description here

这是因为“libDynminLinkingLib.1.dylib”不在应用程序路径中。

otool -D /System/Library/Frameworks/MyFrm.framework/dylib/libDynminLinkingLib.1.0.0.dylib
libDynminLinkingLib.1.dylib

我有两个问题:

  1. 我知道如何通过install_name_tool来解决这个问题,但我想在qmake和.pro文件中解决这个问题。那么如何通过pro配置文件解决这个问题?

  2. 在El Capitan,由于安全原因,我无法使用DYLD_LIBRARY_PATH。为了使用它,我必须停用SIP(系统完整性保护)。那么有没有办法在不停用SIP的情况下使用DYLD_LIBRARY_PATH?

1 个答案:

答案 0 :(得分:0)

这不是一个完整的解决方案,但是如果您只是想要构建其他内容的某些本地库,那么您可以创建~/lib~/include个文件夹并放置文件那里。这些文件夹位于默认路径上。

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/UsingDynamicLibraries.html