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