Xcode 4添加dylib

17
我想创建并将 dylib 添加到项目中。 我使用“Cocoa-Library”模板创建了它,并将类型设置为“Dynamic”,但不确定它应该是动态的还是静态的。然后,我创建了一个简单的 Objective-C 类 Test,并在其中编写了一个打印一些内容到控制台的方法。
我编译并使用生成的 .dylib 文件并将其放入另一个项目中。现在每当我尝试使用它时,在运行时会收到此消息。
dyld: Library not loaded: /usr/local/lib/TESTLib.dylib
  Referenced from: /Users/***/Library/Developer/Xcode/DerivedData/TestingDYLIB-axmoocnxbwznoyerfogosumqufxc/Build/Products/Debug/TestingDYLIB.app/Contents/MacOS/TestingDYLIB
  Reason: image not found

我还创建了一个“复制文件”阶段,并将目标设置为“Frameworks”。但我仍然收到相同的错误信息。 我做错了什么?

2个回答

37

这个问题与Xcode在编译时查找库的位置无关,这是Simon Whitaker的答案所解决的问题。

问题在于使用dylib的应用程序在运行时无法找到它。当构建使用动态库的应用程序时,它会将dylib的install_name复制到输出二进制文件中。

创建一个复制文件阶段并将dylib复制到应用程序捆绑包的Frameworks子目录中是正确的做法。

然而,您需要进行另一个步骤。 您需要使用适合捆绑应用程序的install_name编译动态库。默认情况下,动态库的install_name为/usr/local/lib。应用程序无法在那里找到您的库,因为它不存在。即使您将库放在那里,您的用户肯定也不会有它,所以那是错误的解决方案。

正确的解决方案是将库与应用程序捆绑在一起。要为动态库设置安装名称,请进入动态库项目并将“Dynamic Library Install Name”选项设置为:@executable_path/../Frameworks/libmydynamiclibrary.dylib


我遇到了同样的问题。我无法完成解决方案的最后一步。在哪里可以设置名称以便于某些框架路径? - JiteshW
1
我该如何“进入动态库项目”?因为我下载了一个 .dylib 文件,但我不知道如何将其链接到项目中以实现可移植性。 - Fady Kamal
是的,我也一样,我甚至无法弄清楚第一步在哪里,“动态库项目”在哪里? - Steve Ham
在原帖发布者的情况下,他正在创建自己的动态库项目,因此他有 Xcode 项目文件。 如果您正在使用已下载的动态库,则如果存在源代码,则会有某种项目文件或 Makefile。 如果没有源代码,只有库,则可以使用 install_name_tool(请参阅 man 页面)更改库中记录的安装路径。 - wadesworld
1
如果我有一个库和另一个依赖于第一个库的库,是否可以为每个库制作一个.framework,其中包括头文件和具有已更正安装名称的dylib?这将仅使用dylib,而不是两个库的源代码。 - Farski
显示剩余4条评论

2

Xcode正在/usr/local/lib/中查找库文件。如果该库文件在其他位置,请将该位置添加到您的库搜索路径中:

  1. 在Xcode 4中选择项目文件
  2. 选择目标,然后单击“Build Settings”选项卡
  3. 确保筛选栏中选择了“全部”,而不是“基本”
  4. 向下滚动到“搜索路径”部分,您会发现其中的“库搜索路径”

我将.dylib文件拖到了Xcode的frameworks文件夹中。该库位于: /Users/*****/Desktop/TestingDYLIB,已经在库搜索路径中存在。 - user635064
我已经这样做了,并将位置设置为包含 .dylib 的我的位置,但仍然找不到它。 - Fady Kamal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接