【问题标题】:mac app requires newer version of sqlite but uses the old onemac 应用程序需要更新版本的 sqlite,但使用旧版本
【发布时间】:2014-10-24 22:33:11
【问题描述】:

尝试在 mac (Mavericks) 上运行/调试应用程序,该应用程序必须使用 sqlite 3.8.6。

我在项目中有 .h 和 .c 文件。我已将 dylib 添加为构建资源

LIBS += sqlite3/libsqlite3.0.dylib

但我还必须将 dylib 放在某个地方,并在运行时告诉程序使用这个版本。

系统上安装了 SQLite 版本 3.7.13(/usr/lib)。它似乎被优先使用。如果我有管理员权限(我没有),我可以将它移动到不同的位置......但是用户系统可能会将它放在默认位置,这样就没有用了。

我已尝试将我的 sqlite3 放置在将优先使用的位置 - 例如在 myapp.app/Contents/Frameworksmyapp.app/Contents/MacOs... 还尝试使用 install_name_tool... 更改依赖关系...没有成功。

使用otool -L 检查依赖关系会显示在/usr/local/lib 中对sqlite3.0.dylib 的依赖关系(不包含任何sqlite3)......即使在运行install_name_tool 之后它仍然显示相同。也许我做错了......

install_name_tool -id @executable_path/Frameworks/libsqlite3.0.dylib myapp.app/Contents/Frameworks/libsqlite3.0.dylib
install_name_tool -change myapp.app/Contents/Frameworks/libsqlite3.0.dylib @executable_path/Frameworks/libsqlite3.0.dylib  myapp.app/Contents/Frameworks/mylib.dylib
install_name_tool -change myapp.app/Contents/Frameworks/libsqlite3.0.dylib @executable_path/Frameworks/libsqlite3.0.dylib  myapp.app/Contents/MacOs/myapp

我收到一个 SQL 错误,原因是使用了错误(旧)版本的 sqlite3,它不支持某些必需的功能。

如何强制应用查看我添加的版本?

更新:我添加了c文件并删除了dylib作为依赖...

我收到了错误no such module: fts4

我在 .c 文件中添加了以下内容(来自 http://www.sqlite.org/fts3.html) - 正如下面 cmets 中所建议的那样

#define SQLITE_ENABLE_FTS4
#define SQLITE_ENABLE_FTS4_PARENTHESIS

在windows和linux中添加相同,效果是库+sqlite3大小的两倍。而且对数据库的查询运行速度明显较慢(我实际上认为它们甚至没有执行)。

如果这是我在 mac 上的唯一选择,我将不得不使用它...我要么被困在非常缓慢的构建、非常大的库和非常慢的查询中,要么...仍然必须有一个使用sqlite3.dylib 而不将其构建到我正在创建的库中的选项。

【问题讨论】:

  • 我认为您可以将原始(合并)文件 sqlite3.csqlite3.h(查找版本 3.8.6)添加到您的 Xcode 项目中。基本上就是这样。
  • 我在项目中有两个文件。如果我不包含具有相同版本的 dylib,我实际上会收到构建错误。但是构建和选择正确的运行时版本是不同的事情......在 linux 中,我所要做的就是将 LD_LIBRARY_PATH 设置为指向我的 sqlite3.so 文件所在的文件夹。但是在mac上,同样的事情似乎不起作用......
  • 为什么不用新的 Xcode-Project 测试一下。创建它并向其中添加 2 个 sqlite3 文件并添加一些测试代码以查看使用的 sqlite3 的版本。
  • 添加 .c 文件时出现错误“没有这样的模块:fts4”
  • 在.c 文件中添加#define 有效,非常感谢!您能否将其添加为答案,以便我接受?

标签: macos qt sqlite linker


【解决方案1】:

您可以将原始 (Amalgamation) 文件 sqlite3.csqlite3.h(查找版本 3.8.6)添加到您的 Xcode 项目中。基本上就是这样。

如果您需要更改/添加一些编译选项 您可以在 sqlite3.c 的顶部执行此操作。

这里是激活 FTS3/FTS4 的示例:

#define SQLITE_ENABLE_FTS4

所有编译选项都在这里:http://www.sqlite.org/compile.html

【讨论】:

  • 感谢您的帮助,我接受它,因为它有效,但如果在某个时候我找到一种使用 dylib 的方法,而不是将 sqlite3 构建到我的 lib 中,它会更好跨度>
  • 谢谢你,祝你好运! Xcode 中关于动态库的文档现在对我来说有点多:)
猜你喜欢
  • 2018-12-08
  • 1970-01-01
  • 2018-10-14
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
  • 2017-11-01
  • 1970-01-01
相关资源
最近更新 更多