尝试在Mac(Mavericks)上运行/调试应用程序,该应用程序必须使用sqlite 3.8.6。
我在项目中有.h和.c文件。我将dylib添加为构建资源
LIBS += sqlite3/libsqlite3.0.dylib
但是我还必须将dylib放在某个地方,并在运行时告诉程序使用此版本。
系统上已安装了SQLite版本3.7.13(位于中/usr/lib
)。似乎优先使用。如果我拥有管理员权限(我没有),则可以将其移至其他位置...但是用户系统可能会将其放在默认位置,因此这将毫无用处。
我试图将MY sqlite3放置在优先使用的地方-像inmyapp.app/Contents/Frameworks
或myapp.app/Contents/MacOs
...,也试图改变依赖关系,但install_name_tool
没有成功。
使用来检查依赖项会otool -L
显示对sqlite3.0.dylib
in的依赖关系/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
没有建设成我创建的lib。
您可以仅将原始(Amalgamation
)文件sqlite3.c
和sqlite3.h
(查找版本3.8.6)添加到Xcode项目中。基本上就是这样。
如果需要更改/添加一些编译选项,可以在sqlite3.c的顶部进行。
以下是激活FTS3 / FTS4的示例:
#define SQLITE_ENABLE_FTS4
所有的编译选项都在这里:http : //www.sqlite.org/compile.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句