我有一个计划(具体地说我的条目 所以DevDays倒计时应用程序的挑战)其依赖于若干动态库,即libSDL,libSDL_ttf,和其他人。我拥有这些图书馆安装下 /opt/local/lib 通过MacPorts,许多人不会具有这些安装的(有些可能已经安装,但不是在那个位置)。

我怎么分发的我的程序使得人们如果没有这些图书馆安装了可以运行它的盒子吗?显然我会分发的各个 .dylib 文件的,但这样做是不够的。动态加载程序看起来还是图书馆安装在的位置我让他们安装。是否有一个方式告诉的动态加载程序来看,在目前的目录可执行的,喜欢什么样的窗户没有与Dll?人们不应该必须修改任何环境变量(例如 DYLD_LIBRARY_PATH),由于我再次希望这个工作的框。

有帮助吗?

解决方案

正如你所说你没有使用模式,所以这有点困难。这里是选择在我的优先顺序:

  1. 切换到载。使用框架。SDL库可以作为框架已经,我已经看到了更多的不是一对夫妇的商业游戏libsdl.框架内的应用程序包。

  2. 使用框架,但保持你的生成文件.下载版本的框架SDL库(或建立他们自己)和链接与他们的框架连接的标志。分配框架应用或不,告诉你的用户,把它们放在任~/Library/Frameworks或/Library/框架。我不会打扰,与一个安装于此。

  3. 静态链接对SDL。在生成文件,你会有列出的路径的静态图书馆,而不是使用-l的标志,例如,运行"ld等等等等等/opt/local/lib/libsdl.a"。没有方式,我知道,告诉我更喜欢静通过共享图书馆,并相信我,我看。

其他提示

基本的方法来这是为了船他们。应用程序包。然后你会修改位置的连接起来的共享图书馆,包括这一点。

该步骤是:

  1. 创建一个新的文件复制建立阶段到你的目标,复制这些文件的进入该框架的目录。应用程序包。

  2. 编辑建立结构设置"Runpath搜索的道路"为包括 @executable_path/../Frameworks

如果你建立可执行这些改变然后看看,你应该找到dylibs存在的 Foo.app/Contents/Framework 目录和运行 otool -L Foo.app/Contents/MacOS/Foo 应该产率和进入加@路径对于那些dylibs.

从这个 Cocoabuilder后:

在一般情况下, @loader_path 是首选 @executable_path, ,因为它
允许嵌入式框架的工作既可执行和束,
插件,或子的框架。唯一的缺点是, @loader_path
需要10.4或更新的。如果你在10.5或更新, @rpath 甚至是
@loader_path.

静态链接库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top