0

在我无法找出正确的搜索词之前,这很可能已经被问到了。

我正在编写一个在 OSX 桌面上运行的客户端-服务器应用程序,它将与本地网络上的 MySQL 服务器通信。当基本上一堆 SQL 语句在内部是完美的时,实现 Web 服务 API 似乎是冗长的。

我已经在我的开发机器上与 MySQL 服务器的安装过程搏斗了,广告不得不求助于将 libmysqlclient.18.dylib 符号链接到 /usr/lib 即使我将包含路径放在头搜索路径中。

我需要知道的是如何创建一个 .app 文件,我可以将其发送到可以访问 libmysqlclient.18.dylib 文件的其他机器?

尽管我已经为 iDevices 做 Obj-c 2 年了,但我已经习惯了 Windows 有安装程序来执行此操作,并且对 OSX 编程有点陌生。

是否有允许将库复制到 .app 文件中的设置,或者我是否需要在每台机器上安装 mysql 连接器 - 如果是这样,我如何解决符号链接问题,理想情况下我需要它从库存中工作文件夹。

如果这已在其他地方得到回答,请指出我正确的方向。

4

1 回答 1

2

在构建时,OS X 上的静态链接器 ld 将应用程序链接到的每个库的共享库标识符写入应用程序二进制文件。在运行时,动态链接器 dyld 尝试从应用程序二进制文件中指定的路径加载每个共享库。您可以使用 来查看此信息otool -L YourApp.app/Contents/MacOS/YourApp

您需要将 libmysqlclient.18.dylib 符号链接到 /usr/lib 的事实表明 libmysqlclient.18.dylib 的共享库标识符类似于 /usr/lib/libmysqlclient.18.dylib。要以您的应用程序将使用它而不是查看 /usr/lib 的方式将库包含在您的 .app 包中,您需要:

  1. 更改 libmysqlclient.18.dylib 的共享库标识符,以便 dyld 查找与您的应用程序二进制文件相关的二进制文件。这通常通过运行来完成install_name_tool -id @executable_path/../Frameworks/libmysqlclient.18.dylib libmysqlclient.18.dylib

  2. 将修改后的 libmysqlclient.18.dylib 复制到应用程序包中的 Frameworks 子目录中。这通常使用 Xcode 项目中的 Copy Files 构建阶段来完成。

然后,您应该能够验证写入应用程序二进制文件的安装名称是@executable_path/../Frameworks/libmysqlclient.18.dylib不是/usr/lib/libmysqlclient.18.dylibotool -L YourApp.app/Contents/MacOS/YourApp再次使用)。如果安装名称不正确,那么您需要确保您的链接器搜索路径设置为在您可能拥有的任何其他版本之前找到您修改后的 libmysqlclient.18.dylib 版本。

于 2013-01-19T04:57:16.753 回答