尝试在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/Frameworks
或myapp.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
而不将其构建到我正在创建的库中。
答案 0 :(得分:0)
您只需将原始(Amalgamation
)文件sqlite3.c
和sqlite3.h
(查找版本3.8.6)添加到Xcode项目中即可。基本上就是这样。
如果您需要更改/添加一些编译选项 你可以在sqlite3.c的顶部做到这一点。
这里有一个激活FTS3 / FTS4的例子:
#define SQLITE_ENABLE_FTS4
所有编译选项都在这里:http://www.sqlite.org/compile.html