0

我在 Xcode 中使用 info.plist 来设置环境变量 DYLD_LIBRARY_PATH 和 DYLD_FRAMEWORK_PATH。

我将 DYLD_LIBRARY_PATH 设置为

$CONTENTS_FOLDER_PATH/runtime/1.1.0:$CONTENTS_FOLDER_PATH/modules/tiapp/1.1.0:$CONTENTS_FOLDER_PATH/modules/ticodec/1.1.0:$CONTENTS_FOLDER_PATH/modules/tidatabase/1.1.0:$CONTENTS_FOLDER_PATH/modules/tifilesystem/1.1 .0:$CONTENTS_FOLDER_PATH/modules/timedia/1.1.0:$CONTENTS_FOLDER_PATH/modules/timonkey/1.1.0:$CONTENTS_FOLDER_PATH/modules/tinetwork/1.1.0:$CONTENTS_FOLDER_PATH/modules/tiplatform/1.1.0:$CONTENTS_FOLDER_PATH/ modules/tiprocess/1.1.0:$CONTENTS_FOLDER_PATH/modules/tiui/1.1.0:$CONTENTS_FOLDER_PATH/modules/tiworker/1.1.0

DYLD_FRAMEWORK_PATH 到

$CONTENTS_FOLDER_PATH/runtime/1.1.0

当我双击我的 .app 文件夹时,dlopen 找不到上面文件夹中引用的任何 .dylib。

如果我采用完全相同的变量和路径并将它们放在 Xcode 中的可执行参数中,一切正常,但前提是我通过 Xcode 运行软件,并且当您单击 .app 文件夹时,我需要一切正常工作。

我在 info.plist 中做错了什么?它不喜欢 $CONTENTS_FOLDER_PATH 吗?它需要不同的分隔符吗?为什么相同的参数在 Executable Arguments 中有效,但在 info.plist 文件中无效?

提前致谢。

4

2 回答 2

2

您使用什么键Info.plist来设置环境变量?您的意思是您在 Xcode 的“环境变量”配置中设置环境变量(Xcode 4 中方案的一部分,Xcode 3 中自定义可执行文件的一部分),还是您只是将键/值投入Info.plist并期待他们出现在环境中?

在前一种情况下,即使这有效,它也只会在您运行 Xcode 时有用,而不是在您发布产品时。在后一种情况下,据Info.plist我所知,没有添加环境变量的机制。

就个人而言,我不想在你的包中拥有这棵巨大的树,而是让 Xcode 将你所有的 dylib 复制到你的包的插件目录(PlugIns)中,然后使用NSBundle(或CFBundle)来获取它的路径。或者,如果这些不是真正的“插件”,您可以使用另一个目录。但是将它们全部放在你的包内的一个目录中。不要搜索它们。(您可以自由地将它们放在源代码树中的许多目录中;这纯粹是关于捆绑包的。)

于 2011-07-16T02:07:51.967 回答
0

我最终使用 @rpath 找到了我所有的 dylib 和框架。我使用@rpath/-库或框架的名称-的安装名称重建了所有框架和库。

然后我在主项目的运行搜索路径设置中添加了相对路径名,如@loader_path/../runtime/1.1.0 和@loader_path/../modules/等...

这允许 dlopen 调用在不使用 plist 或可执行参数的情况下查找当前路径。

于 2011-10-28T19:28:41.197 回答