mac app需要更新版本的sqlite但使用旧版本

时间:2014-10-24 22:33:12

标签: macos qt sqlite linker

尝试在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检查依赖关系会显示sqlite3.0.dylib/usr/local/lib的依赖关系(不包含任何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) - 正如下面的评论所示

#define SQLITE_ENABLE_FTS4
#define SQLITE_ENABLE_FTS4_PARENTHESIS

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

如果这是我在Mac上唯一的选择,我将不得不使用它...我要么停留在非常慢的构建,非常大的库,以及非常慢的查询,或者......必须仍然存在选项使用sqlite3.dylib而不将其构建到我正在创建的库中。

1 个答案:

答案 0 :(得分:0)

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

如果您需要更改/添加一些编译选项 你可以在sqlite3.c的顶部做到这一点。

这里有一个激活FTS3 / FTS4的例子:

#define SQLITE_ENABLE_FTS4

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