2

下面是我的场景,

  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 但到目前为止尚未成功

4

1 回答 1

1

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

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

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

于 2013-03-27T13:10:03.580 回答