簡體   English   中英

Mac App需要更新版本的sqlite,但使用舊版本

[英]mac app requires newer version of sqlite but uses the old one

嘗試在Mac(Mavericks)上運行/調試應用程序,該應用程序必須使用sqlite 3.8.6。

我在項目中有.h和.c文件。 我將dylib添加為構建資源

LIBS += sqlite3/libsqlite3.0.dylib

但是我還必須將dylib放在某個地方,並在運行時告訴程序使用此版本。

系統上(在/usr/lib )安裝了SQLite 3.7.13版。 似乎優先使用。 如果我擁有管理員權限(我沒有),則可以將其移動到其他位置...但是用戶系統可能會將其放在默認位置,這樣將毫無用處。

我試圖將我的sqlite3放置在優先使用的地方-例如在myapp.app/Contents/Frameworksmyapp.app/Contents/MacOs ...也嘗試使用install_name_tool更改依賴項...沒有成功。

使用otool -L檢查依賴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

我收到由錯誤(較舊)的sqlite3版本引起的SQL錯誤,該版本不支持某些必需的功能。

如何強制應用查看我添加的版本?

更新 :我添加了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而不將其構建到我正在創建的庫中。

您可以僅將原始( Amalgamation )文件sqlite3.csqlite3.h (查找版本3.8.6)添加到Xcode項目中。 基本上就是這樣。

如果需要更改/添加一些編譯選項,則可以在sqlite3.c的頂部進行。

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

#define SQLITE_ENABLE_FTS4

所有的編譯選項都在這里: http : //www.sqlite.org/compile.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM