Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode一直在错误的路径上搜索动态库_Xcode_Linker_Dylib - Fatal编程技术网

Xcode一直在错误的路径上搜索动态库

Xcode一直在错误的路径上搜索动态库,xcode,linker,dylib,Xcode,Linker,Dylib,这是我的错误: dyld: Library not loaded: /usr/local/lib/libofa.0.dylib Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test Reason: image not found 我做了一些研究,并用install_name_工具更改了动态库中的路径: davids-macbook:Test david$ otool -L libo

这是我的错误:

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found
我做了一些研究,并用install_name_工具更改了动态库中的路径:

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib 
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
但是Xcode一直在/usr/lib/中搜索它:

build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)
有没有办法在Xcode中设置它???谢谢


编辑:库不是Xcode项目。其构建方式为./configure;使

通常我所做的是:

  • 将库的安装目录设置为
    @rpath
    。这将安装名称设置为
    @rpath/libofa.0.0.0.dylib
    。如果您自己构建库,可以在Xcode中进行设置;否则,请使用
    install\u name\u tool
    对其进行更改
  • 将使用库的应用程序的运行路径搜索路径设置为包含库的目录的位置。例如,如果将库放在应用程序的Frameworks目录中,则将运行路径搜索路径设置为
    @executable\u path/。/Frameworks
    (或
    @loader\u path/。/Frameworks

  • 请确保从developer.apple.com安装命令行工具,然后在项目中添加该库。在Xcode中运行以下脚本:目标»构建阶段»运行脚本并执行:

    install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"
    

    注意:在使用dylib名称之前不需要“或”

    在使用解决方案之前,您应该知道MAC中的依赖库“dylib”与windows中的依赖库“dll”相比有什么新功能

    dylib与dll的主要区别在于“安装名称”。安装名称是烘焙到动态库中的一个路径,表示在运行时在何处查找库。无论您将dylibs复制到何处,它都将始终指向旧路径(除非不更改安装名称)。 您可以使用如下命令了解原始搜索路径(安装名称)

    otool-la.dylib

    (只需拖动dylib而不是a.dylib)

    有关安装名称的更多详细信息,请参阅此

    现在,更改dylib的新位置(“安装名称”)的解决方案就是使用
    install\u name\u工具
    ,如下所示

    安装\u name\u工具-更改*dylb的旧路径**dylib的新路径*

    您可以通过上面描述的
    otool-L
    命令获取旧路径。(旧路径即原始路径)

    install\u name\u tool-change
    也可以更改动态库和可执行文件的搜索路径


    您可以通过在项目中写入
    Run script
    文件在Xcode中使用此功能。

    Xcode没有,链接器有。有没有办法让Xcode告诉链接器..?这似乎不起作用。我的错误仍然存在。我已经用install\u name\u tool-id设置了路径。我尝试了install-name\u tool-add\u rpath。什么都不管用。我尝试将运行路径搜索路径和运行时搜索路径设置为@loader\u path/。/Frameworks,但它的“dyld:Library not loaded:/usr/local/lib/libofa.0.dylib”仍然让我感到愚蠢。我的项目中有一些愚蠢的包含设置。谢谢嗨,大卫,我也有同样的问题,我不明白你说的“愚蠢的包含设置”是什么意思。你能举一个简短的例子吗?同样,谷歌也有这个问题,但没有解决方案告诉我如何解决it@MottiShneor:这是
    -id
    选项。很棒的提示!顺便说一下,对于框架,使用
    install\u name\u tool-id@executable\u path/。/frameworks/MyFramework.framework/MyFramework“$SRCROOT/MyFramework.framework/MyFramework”
    (其中
    MyFramework
    是框架的名称)。