gpt4 book ai didi

xcode - 如何在 Xcode 中设置 dyld_library_path

转载 作者:行者123 更新时间:2023-12-03 22:58:28 25 4
gpt4 key购买 nike

我是 Xcode 和 Mac 环境的新手。我正在使用一些动态和静态库,如 boost、Clucene 等。我有所有的库

MyApp.app/Contents/Resources



我想将此路径设置为应用程序的 dyld_library_path。我尝试编辑 XXX.plist 文件,例如

DYLD_LIBRARY_PATH /mypath/xxx



并在 Xcode 中设置环境变量和参数没有任何作用。

但是如果我运行一个像下面这样的 shell 脚本而不双击我的 .dmg 中的应用程序,它就可以工作
#!/bin/bash
clear
cd /Volumes/xxx/myapp.app/Contents/MacOS
export DYLD_LIBRARY_PATH="/Volumes/xxx/myapp.app/Contents/Resources"
./myapp

我确信这不是执行此操作的正确方法。每次执行我的应用程序时,是否有正确的方法来设置 dyld_library_path?

编辑:
如果您手动将所有库复制到客户端/usr/lib 路径,它也可以工作...我想这也不是正确的方法。

最佳答案

设置 DYLD_LIBRARY_PATH不是解决这个问题的最好方法。它正在解决您误导的事实 dyld至于在哪里可以找到你的图书馆。

如果您运行 otool -L MyApp.app/Contents/MacOS/MyApp您将看到 MyApp 要加载的库的路径。如果在指定路径中未找到任何库,则 dyld将在 DYLD_FALLBACK_LIBRARY_PATH 指定的位置查找库.设置 DYLD_LIBRARY_PATH原因 dyldotool 路径前面的给定位置中查找库上面的命令返回。

解决此问题的最佳方法是让您的应用程序指定要开始的库的正确位置,以便设置 DYLD_LIBRARY_PATH没有必要。为此,您需要执行以下操作:

  • 将您在应用程序中捆绑的每个库的库标识符设置为 @rpath - 相对值(value)。您可以使用 install_name_tool -id @rpath/libFoo.dylib libFoo.dylib 执行此操作.
  • 添加复制文件构建阶段以将库复制到应用程序包装器中。 MyApp.app/Contents/Frameworks是一个典型的位置。 MyApp.app/Contents/Resources应该避免,因为二进制文件不是该术语通常意义上的资源。
  • 链接应用程序时指定运行路径搜索路径。这为链接器提供了用于解析任何 @rpath 的路径列表。它在任何加载命令中遇到的变量。如果您要将库复制到 MyApp.app/Contents/Frameworks您需要指定 @loader_path/../Frameworks 的运行路径搜索路径.您可以通过 LD_RUNPATH_SEARCH_PATHS 执行此操作(Runpath Search Paths) 在您的应用程序目标上的 Xcode 配置设置。

  • 完成所有这些后,您应该能够重新运行 otool上面提到的命令,看到你的库的路径正在使用 @rpath - 相对路径。然后你应该可以运行 otool -lV MyApp.app/Contents/MacOS/MyApp并看到一个 LC_RPATH使用值 @loader_path/../Frameworks 指定的加载命令.最后,您应该能够运行您的应用程序并看到它在其 Frameworks 目录中找到了库,而无需 DYLD_LIBRARY_PATH放!

    关于xcode - 如何在 Xcode 中设置 dyld_library_path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888668/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com