2016-09-28 88 views
0

我想在Xcode中编译SQLite作为静态库在iOS项目中使用。该项目是多平台的,我们有一个使用SQLite编写的用C++编写的公共部分。这就是为什么我不能使用iOS标准。如何正确配置SQLite thread_safe模式

我坚持了一个很简单的问题 - 在我编译库,并在我的代码中使用它,sqlite3_threadsafe()返回2,即使我设置模式1. 我在现场设置的模式“其他C标志”通过写标志DSQLITE_THREADSAFE建立在Xcode中设置= 1

Xcode Build Settings

可能是什么问题呢?我尝试了一切,但似乎我失去了一些明显的东西。

回答

0

默认情况下,Xcode以它支持多线程和串行模式的方式编译Sqlite,因此不需要使用编译器标志。相反,您必须在初始化sqlite3 *实例之前在代码中启用它:

sqlite3_shutdown(); 
if (sqlite3_threadsafe() > 0) { 
    int retCode = sqlite3_config(SQLITE_CONFIG_SERIALIZED); 
    if (retCode == SQLITE_OK) { 
     NSLog(@"Can now use sqlite on multiple threads, using the same connection"); 
    } else { 
     NSLog(@"setting sqlite thread safe mode to serialized failed!!! return code: %d", retCode); 
    } 
} else { 
    NSLog(@"Your SQLite database is not compiled to be threadsafe."); 
} 
sqlite3_initialize();