Macos mac应用程序需要更新版本的sqlite,但使用旧版本

Macos mac应用程序需要更新版本的sqlite,但使用旧版本,macos,qt,sqlite,linker,Macos,Qt,Sqlite,Linker,尝试在mac(Mavericks)上运行/调试应用程序,该应用程序必须使用sqlite 3.8.6 我在项目中有.h和.c文件。我将动态库添加为构建资源 LIBS += sqlite3/libsqlite3.0.dylib 但是我还必须把动态库放在某个地方,并在运行时告诉程序使用这个版本 系统上安装了SQLite版本3.7.13(在/usr/lib中)。它似乎被优先使用。如果我有管理员权限(我没有),我可以将其移动到其他位置。。。但是,用户系统可能会将其放在默认位置,这样就没有用了 我已尝试将

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

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

LIBS += sqlite3/libsqlite3.0.dylib
但是我还必须把动态库放在某个地方,并在运行时告诉程序使用这个版本

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

我已尝试将sqlite3放置在优先使用的位置,如
myapp.app/Contents/Frameworks
myapp.app/Contents/MacOs
。。。还尝试使用
install\u name\u tool
更改依赖项。。。没有成功

使用
otool-L
检查依赖项时,会显示对
/usr/local/lib
中的
sqlite3.0.dylib
的依赖项(不包含任何
sqlite3
)。。。即使在运行
install\u name\u 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文件并删除了作为依赖项的动态库

我得到了错误
没有这样的模块:fts4

我在.c文件(from)中添加了以下内容-如下面的注释所示

#define SQLITE_ENABLE_FTS4
#define SQLITE_ENABLE_FTS4_PARENTHESIS
在windows和linux中添加相同的功能,效果是库+sqlite3大小的两倍。数据库上的查询运行速度要慢得多(我实际上认为它们甚至没有被执行)


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

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

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

以下是激活FTS3/FTS4的示例:

#define SQLITE_ENABLE_FTS4

所有编译选项都在这里:

我认为您可以将原始(合并)文件
sqlite3.c
sqlite3.h
(查找版本3.8.6)添加到您的Xcode项目中。基本上就是这样。我在项目中有两个文件。如果我没有包括同一版本的动态库,我实际上会得到一个构建错误。但是构建和选择正确的运行时版本是不同的事情。。。在linux中,我所要做的就是将LD_LIBRARY_路径设置为指向存放sqlite3.so文件的文件夹。但是在mac上,同样的事情似乎不起作用……为什么不用一个新的Xcode项目来测试呢。创建它并向其中添加2个sqlite3文件,添加一些测试代码以查看所用sqlite3的版本。添加.c文件时,我得到错误“没有这样的模块:fts4”。在.c文件中添加#define有效,非常感谢!谢谢你的帮助,我接受这个答案,因为它是有效的,但是如果在某个时候我找到了一种使用动态库的方法,而不是将sqlite3构建到我的库中,那会更好谢谢你,祝你好运!Xcode中关于动态库的文档现在对我来说有点太多了:)