gpt4 book ai didi

xcode - 强制 OS X 应用程序使用特定的 libcurl.dylib

转载 作者:行者123 更新时间:2023-12-03 17:24:53 25 4
gpt4 key购买 nike

我的应用程序需要版本 7 的 libcurl,并且在 Lion 上运行良好,但在 Snow Leopard 上的 libcurl.dylib 版本不起作用(我的 *MKD 命令需要 * 前缀)。

我尝试了各种方法将 Lion 版本的 libcurl.dylib 包含在我的包中,包括将副本放入 (1) 应用程序文件夹、(2) Contents 文件夹、(3) MacOS 文件夹和 (4) Resources 文件夹,但没有成功。甚至四份,每个文件夹一份。 (仍然转到/usr/lib。)

我还尝试将 Xcode 4.2 中的“Runpath Search Paths”设置为“.”,但这没有帮助。

所以,问题#1 是,如何强制 Snow Leopard 上的应用程序使用我包含在包中的 dylib? (安装新的 libcurl.dylib 是不可能的——这个应用程序将进入 Mac App Store。)

通过实验,我用 Lion 中的文件替换了 Snow Leopard 系统上的/usr/lib/libcurl.dylib,并且该应用程序可以正常运行。所以我知道如果我能让应用程序使用这个库,它就会正常工作。

我还尝试构建一个静态 libcurl.a,它可以工作(使用configure、make 和 make install),但在尝试链接该应用程序时仍然引用了 dylib。然后,我将静态库的名称更改为 libcurl-static.a,但随后出现链接器错误,因为其他 dylib 中的数十个符号未定义。我尝试在构建中包含更多 dylib,以解决这些问题,但 libcurl 所需的 dylib 列表显然很长。我尝试使用 otool 来找出所需的内容,但没有一个选项向我显示任何有用的信息。

问题 #2 是:如何将我的应用程序与 libcurl 静态链接?

(我有一个无法使用 *MKD 的解决方法,如果目录已经存在,它会忽略错误,但它涉及太多额外的 FTP 操作,效率低下。我使用 *MKD 的方法效果很好,而且速度很快.)

不需要建议我去另一个 FTP 库,因为我已经想到了。不太想这样做,因为 libcurl 在 Lion 上运行良好。如果我能让它使用我在 Snow Leopard 上提供的库就好了。

最佳答案

1) 您必须更改库的 ID(在链接之前)- 默认情况下它将指向 /usr/lib/这不是您运送它的地方。请参阅otool -L :

$ otool -L /usr/lib/libcurl.4.dylib  | head -n 2
/usr/lib/libcurl.4.dylib:
/usr/lib/libcurl.4.dylib (compatibility version 6.0.0, current version 6.1.0)

更改您使用的 ID install_name_tool -id new/path/libcurl.4.dylib your/copy/of/libcurl.4.dylib ,特别是您可能想使用 @executable_path/与可执行文件的位置相对应的前缀。或者,您可以使用 install_name_tool -change /usr/lib/libcurl.4.dylib @executable_path/libcurl.4.dylib yourapp 更改编译的二进制文件中的路径。

2) 您可以使用库名称 so 而不是 -lcurl 来强制静态链接。您只需使用 libcurl.a (如果不在当前目录中,则使用完整路径) - 我强烈推荐该路径,它会减少一些麻烦。

PS:我不确定你是否可以合法地发布 Apple 的 libcurl(你可以,我不知道) - 但从 Apple 的源代码直接为 SL 编译它是非常容易的,这可以避免任何 Lion 问题。

关于xcode - 强制 OS X 应用程序使用特定的 libcurl.dylib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9353420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com