【问题标题】:Is there any way to change the dynamic library search path in Xcode有什么办法可以改变Xcode中的动态库搜索路径
【发布时间】:2013-03-27 11:13:37
【问题描述】:

下面是我的场景,

  1. 在我的应用程序中,我不得不使用 libopus 库,我下载并安装,编译 --> 安装过程与任何其他开源库一样正常,

  2. 我将 libopus.a 与我的应用程序相关联,我的做法是,默认情况下它将安装在 /usr/local/lib 中,所以我从那里拖动并将其添加到我的应用程序中,

在我的机器上工作正常,没有错误,

在另一台机器上,我希望它能够顺利运行,因为我静态地包含了这个库,但它的抛出错误为

dyld: Library not loaded: /usr/local/lib/libopus.0.dylib

所以我得出结论,libopus.a 以某种方式包括 libopus.0.dylib 也是动态的,

现在我无法在构建设置中添加复制阶段,因此它将被复制到 ../Framework 文件夹中

如果我执行 otool -L libpus.a 那么它会显示以下结果

otool -L /usr/local/lib/libopus.a
Archive : /usr/local/lib/libopus.a
/usr/local/lib/libopus.a(bands.o):
/usr/local/lib/libopus.a(celt.o):
/usr/local/lib/libopus.a(cwrs.o):
/usr/local/lib/libopus.a(entcode.o):
/usr/local/lib/libopus.a(entdec.o):
/usr/local/lib/libopus.a(entenc.o):
/usr/local/lib/libopus.a(repacketizer.o):

它没有显示为它依赖于 dylib 库 现在我的问题是
如何告诉应用程序首先查看此路径

我尝试了以下选项,

  1. install_name_tool 但它似乎可以在其他机器上运行,因此用户需要运行此脚本而不是开发人员,

  2. 试图在 xcode 中设置一些选项来设置 RUNTIME 搜索路径来定位特定的 dylib,但目前没有成功

【问题讨论】:

  • otool -L 对于您所包含的库的输出是什么?
  • @jay,我在我的问题中添加了这一点
  • 嗯.. 你确定你没有在 Xcode 中链接到 .dylib?
  • 是的,我故意没有在我的 Xcode 中链接任何 .dylib

标签: objective-c cocoa xcode4.5 dylib install-name-tool


【解决方案1】:

install_name_tool 在构建过程中由开发人员运行,而不是由用户运行。

如果您正在构建库,则应使用 libtool(1) 和选项 -install_name @rpath;否则,您可以使用install_name_tool(1)-id @rpathdylib 上执行相同的操作。然后,在您构建应用程序时,将“运行路径搜索路径”设置为您将安装库的路径。

Apple 在他们的 Mach-O Programming TopicsDynamic Library Programming Topics 中有一些很好的文档。

【讨论】:

  • 谢谢,我会试试看,顺便说一句,我的时间不多了,如果我使用 libopus1.0.1 而不是 1.0.2,这个问题得到了解决
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-26
  • 2015-08-29
  • 1970-01-01
  • 2017-03-06
相关资源
最近更新 更多