[Interest] Custom SQLite and linking woes

mail at herrdiel.de mail at herrdiel.de
Thu Feb 1 19:24:19 CET 2018


Hi,

the QtCipherSqlitePlugin seems to be targeted also for fruit OSs. Works 
very well with Windows, fwiw.

Perhaps looking into it might happen to help you in some way.

Sebastian


Am 01.02.2018 um 14:18 schrieb René Hansen:
> Hi list,
>
>
> I've run into a bit of a problem with the way, that I'd like to use 
> SQLite in my application.
>
> I need to load an extension, which is turned off by default in Qt, so 
> I've made the following change to 
> `qtbase/src/plugins/sqldrivers/sqlite/sqlite.pro <http://sqlite.pro>`:
>
> DEFINES -= SQLITE_OMIT_LOAD_EXTENSION
> DEFINES += SQLITE_ENABLE_LOAD_EXTENSION
>
> And then recompiled and installed the plugin as advised in 
> http://doc.qt.io/qt-5/sql-driver.html:
>
> I'm on macOS, so I've been building against the Homebrew version of of 
> sqlite3 like so:
>
> $ ~/Code/Qt/5.9/clang_64/bin/qmake 
> "INCLUDEPATH+=/usr/local/Cellar/sqlite/3.21.0/include" 
> "LIBS+=-L/usr/local/Cellar/sqlite/3.21.0/lib -lsqlite3" sqlite.pro 
> <http://sqlite.pro>
>
> I `make install` and then try to use the new plugin and then this 
> error appears:
>
> dyld: Symbol not found: _sqlite3_intarray_bind
>   Referenced from: 
> /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
>   Expected in: /usr/local/Cellar/sqlite/3.21.0/lib/libsqlite3.0.dylib
>  in /System/Library/Frameworks/CoreData.framework/Versions/A/CoreData
> The program has unexpectedly finished.
>
> Apparently /CoreData/ expects /_sqlite3_intarray_bind/ to be defined, 
> but clearly this isn't present. There's a slight difference in the 
> symbols available from the systems installed version of sqlite3 and 
> the Homebrew supplied one:
>
> $ diff <(nm -j /usr/lib/libsqlite3.dylib | grep bind) <(nm -j 
> /usr/local/Cellar
> /sqlite/3.21.0/lib/libsqlite3.0.dylib | grep bind)
> 10a11
> > _sqlite3_bind_pointer
> 18d18
> < _sqlite3_intarray_bind
>
> So, from what I've been able to gather searching for answers regarding 
> /_sqlite3_intarray_bind,/ the solution is to just unset 
> /DYLD_LIBRARY_PATH/, but ... that sort of defeats the purpose of 
> trying to use a custom version of sqlite. E.g this answer: 
> https://discussions.apple.com/thread/6646506.
>
> Now, unticking the "Add build library search path to DYLD....." in the 
> run settings, does enable the application to properly load and run 
> but.. again, with the wrong version of sqlite:
>
> SELECT sqlite_version(); # returns "3.16.1"
>
> As far as I can tell, this is the version that ships with Qt 5.9:
>
> $ grep "3\.16\.1" ~/Code/Qt/5.9/Src/qtbase/src/3rdparty/sqlite/sqlite3.h
> #define SQLITE_VERSION "3.16.1"
>
> So, what to do here...?
>
> The weird thing is, that if I run these queries in with that version; 
> 3.16.1:
>
> select sqlite_compileoption_used('ENABLE_LOAD_EXTENSION');
> select sqlite_compileoption_used('OMIT_LOAD_EXTENSION');
>
> I get back the results of *1* and *0*, which would indicate that he 
> recompiled plugin somehow picked up the compile time change. Trying to 
> run a `select load_extension(..)` query however throws back the `not 
> authorized Unable to fetch row` error indicating extension loading is 
> still not enabled. And in case you're wondering, I am running 
> `sqlite3_enable_load_extension(db_handle, 1)` before any of this.
>
> I've tested the 3.21.0 binary of sqlite via the command line and it 
> can execute a `select load_extension(...)`, query just fine.
>
> Any pointers with this, is much appreciated.
>
>
> Best regards,
>
> René Hansen
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/interest

-- 
http://www.classintouch.de - Tablet-Software für Lehrer

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180201/eacafc22/attachment.html>


More information about the Interest mailing list