ios - Why dulplicate symbol errors do not occur when linking both libsqlite3.dylib and libsqlcipher.a? -


i'm integrating sqlcipher ios project according tutorial: https://www.zetetic.net/sqlcipher/ios-tutorial/ there hot tip says:if libsqlite3.dylib or sqlite framework listed in link binary libraries list sure remove it, or you'll see duplicate symbol errors.
tried add both libsqlite3.tbd(no dylib in xcode 7) , libsqlcipher.a link binary libraries, dulplicate symbol error not occur! why?
, notice if click #import <sqlite3.h> line, xcode show sqlite3.h file in xcode's lib folder, not 1 in sqlcipher. however, sqlcipher work, database encrypted.

libsqlite3.tbd text file defines platform architectures supported library, target platforms, dylib installation path , exported symbols. using .tbd file, decrease bundled application size library binary included on platform device not need linked application image.

libsqlite3.tbd looks this:

--- archs:           [ armv7, armv7s, arm64 ] platform:        ios install-name:    /usr/lib/libsqlite3.dylib current-version: 216.4 compatibility-version: 9.0 exports:            - archs:           [ armv7, armv7s, arm64 ]     symbols:         [ __sqlite3_lockstate, __sqlite3_purgeeligiblepagercachememory,                         __sqlite3_system_busy_handler, __sqlite_auto_profile,                         __sqlite_auto_profile_syslog, __sqlite_auto_trace,                         __sqlite_auto_trace_syslog, _sqlite3osshmhasmultiplelinks,                         _sqlite3osshmrenamedwhileopen, _sqlite3osshmwastruncated,                         _sqlite3osshmwasunlinkedwhileopen, _sqlite3versionnumber,                         _sqlite3versionstring, _sqlite3_aggregate_context,                         _sqlite3_aggregate_count, _sqlite3_auto_extension,                         _sqlite3_backup_finish, _sqlite3_backup_init, _sqlite3_backup_pagecount,                         _sqlite3_backup_remaining, _sqlite3_backup_step,                         _sqlite3_bind_blob, _sqlite3_bind_blob64, _sqlite3_bind_double,                         _sqlite3_bind_int, _sqlite3_bind_int64, _sqlite3_bind_null,                         _sqlite3_bind_parameter_count, _sqlite3_bind_parameter_index,                         _sqlite3_bind_parameter_name, _sqlite3_bind_text,                         _sqlite3_bind_text16, _sqlite3_bind_text64, _sqlite3_bind_value,                         _sqlite3_bind_zeroblob, _sqlite3_blob_bytes, _sqlite3_blob_close,                         _sqlite3_blob_open, _sqlite3_blob_read, _sqlite3_blob_reopen,                         _sqlite3_blob_write, _sqlite3_busy_handler, _sqlite3_busy_timeout,                         _sqlite3_cancel_auto_extension, _sqlite3_changes,                         _sqlite3_clear_bindings, _sqlite3_close, _sqlite3_close_v2,                         _sqlite3_collation_needed, _sqlite3_collation_needed16,                         _sqlite3_column_blob, _sqlite3_column_bytes, _sqlite3_column_bytes16,                         _sqlite3_column_count, _sqlite3_column_decltype,                         _sqlite3_column_decltype16, _sqlite3_column_double,                         _sqlite3_column_int, _sqlite3_column_int64, _sqlite3_column_name,                         _sqlite3_column_name16, _sqlite3_column_text, _sqlite3_column_text16,                         _sqlite3_column_type, _sqlite3_column_value, _sqlite3_commit_hook,                         _sqlite3_compileoption_get, _sqlite3_compileoption_used,                         _sqlite3_complete, _sqlite3_complete16, _sqlite3_config,                         _sqlite3_context_db_handle, _sqlite3_create_collation,                         _sqlite3_create_collation16, _sqlite3_create_collation_v2,                         _sqlite3_create_function, _sqlite3_create_function16,                         _sqlite3_create_function_v2, _sqlite3_create_module,                         _sqlite3_create_module_v2, _sqlite3_data_count,                         _sqlite3_data_directory, _sqlite3_db_config, _sqlite3_db_filename,                         _sqlite3_db_handle, _sqlite3_db_mutex, _sqlite3_db_readonly,                         _sqlite3_db_release_memory, _sqlite3_db_status,                         _sqlite3_declare_vtab, _sqlite3_enable_shared_cache,                         _sqlite3_errcode, _sqlite3_errmsg, _sqlite3_errmsg16,                         _sqlite3_errstr, _sqlite3_exec, _sqlite3_expired,                         _sqlite3_extended_errcode, _sqlite3_extended_result_codes,                         _sqlite3_file_control, _sqlite3_finalize, _sqlite3_free,                         _sqlite3_free_table, _sqlite3_get_autocommit, _sqlite3_get_auxdata,                         _sqlite3_get_table, _sqlite3_global_recover, _sqlite3_initialize,                         _sqlite3_intarray_bind, _sqlite3_intarray_create,                         _sqlite3_interrupt, _sqlite3_last_insert_rowid,                         _sqlite3_libversion, _sqlite3_libversion_number,                         _sqlite3_limit, _sqlite3_log, _sqlite3_malloc, _sqlite3_malloc64,                         _sqlite3_memory_alarm, _sqlite3_memory_highwater,                         _sqlite3_memory_used, _sqlite3_mprintf, _sqlite3_msize,                         _sqlite3_mutex_alloc, _sqlite3_mutex_enter, _sqlite3_mutex_free,                         _sqlite3_mutex_leave, _sqlite3_mutex_try, _sqlite3_next_stmt,                         _sqlite3_open, _sqlite3_open16, _sqlite3_open_v2,                         _sqlite3_os_end, _sqlite3_os_init, _sqlite3_overload_function,                         _sqlite3_prepare, _sqlite3_prepare16, _sqlite3_prepare16_v2,                         _sqlite3_prepare_v2, _sqlite3_profile, _sqlite3_progress_handler,                         _sqlite3_randomness, _sqlite3_realloc, _sqlite3_realloc64,                         _sqlite3_release_memory, _sqlite3_reset, _sqlite3_reset_auto_extension,                         _sqlite3_result_blob, _sqlite3_result_blob64, _sqlite3_result_double,                         _sqlite3_result_error, _sqlite3_result_error16,                         _sqlite3_result_error_code, _sqlite3_result_error_nomem,                         _sqlite3_result_error_toobig, _sqlite3_result_int,                         _sqlite3_result_int64, _sqlite3_result_null, _sqlite3_result_text,                         _sqlite3_result_text16, _sqlite3_result_text16be,                         _sqlite3_result_text16le, _sqlite3_result_text64,                         _sqlite3_result_value, _sqlite3_result_zeroblob,                         _sqlite3_rollback_hook, _sqlite3_rtree_geometry_callback,                         _sqlite3_rtree_query_callback, _sqlite3_set_authorizer,                         _sqlite3_set_auxdata, _sqlite3_shutdown, _sqlite3_sleep,                         _sqlite3_snprintf, _sqlite3_soft_heap_limit, _sqlite3_soft_heap_limit64,                         _sqlite3_sourceid, _sqlite3_sql, _sqlite3_status,                         _sqlite3_status64, _sqlite3_step, _sqlite3_stmt_busy,                         _sqlite3_stmt_readonly, _sqlite3_stmt_status, _sqlite3_strglob,                         _sqlite3_stricmp, _sqlite3_strnicmp, _sqlite3_table_column_metadata,                         _sqlite3_temp_directory, _sqlite3_test_control,                         _sqlite3_thread_cleanup, _sqlite3_threadsafe, _sqlite3_total_changes,                         _sqlite3_trace, _sqlite3_transfer_bindings, _sqlite3_update_hook,                         _sqlite3_uri_boolean, _sqlite3_uri_int64, _sqlite3_uri_parameter,                         _sqlite3_user_data, _sqlite3_value_blob, _sqlite3_value_bytes,                         _sqlite3_value_bytes16, _sqlite3_value_double, _sqlite3_value_int,                         _sqlite3_value_int64, _sqlite3_value_numeric_type,                         _sqlite3_value_text, _sqlite3_value_text16, _sqlite3_value_text16be,                         _sqlite3_value_text16le, _sqlite3_value_type, _sqlite3_version,                         _sqlite3_vfs_find, _sqlite3_vfs_register, _sqlite3_vfs_unregister,                         _sqlite3_vmprintf, _sqlite3_vsnprintf, _sqlite3_vtab_config,                         _sqlite3_vtab_on_conflict, _sqlite3_wal_autocheckpoint,                         _sqlite3_wal_checkpoint, _sqlite3_wal_checkpoint_v2,                         _sqlite3_wal_hook ] ... 

you not receive duplicate symbol linker error because including single binary library, libsqlcipher.a. need remove libsqlite3.tbd reference , include libsqlcipher.a if wish use sqlcipher within ios application.


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -