// 动态加载 iconv.dll 库 static void __iconv_dll_load(void) { if (__iconv_dll != NULL) logger_fatal("__iconv_dll not null"); __iconv_dll = acl_dlopen("iconv.dll"); if (__iconv_dll == NULL) logger_fatal("load iconv.dll error: %s", acl_last_serror()); __iconv_open = (iconv_open_fn) acl_dlsym(__iconv_dll, "libiconv_open"); if (__iconv_open == NULL) logger_fatal("load iconv_open from iconv.dll error: %s", acl_last_serror()); __iconv_close = (iconv_close_fn) acl_dlsym(__iconv_dll, "libiconv_close"); if (__iconv_close == NULL) logger_fatal("load iconv_close from iconv.dll error: %s", acl_last_serror()); __iconv = (iconv_fn) acl_dlsym(__iconv_dll, "libiconv"); if (__iconv == NULL) logger_fatal("load iconv from iconv.dll error: %s", acl_last_serror()); __iconvctl = (iconvctl_fn) acl_dlsym(__iconv_dll, "libiconvctl"); if (__iconvctl == NULL) logger_fatal("load iconvctl from iconv.dll error: %s", acl_last_serror()); logger("iconv.dll loaded"); atexit(__iconv_dll_unload); }
// 动态加载 zlib.dll 库 static void __zlib_dll_load(void) { if (__zlib_dll != NULL) logger_fatal("__zlib_dll not null"); #ifdef WIN32 __zlib_dll = acl_dlopen("zlib.dll"); #else __zlib_dll = acl_dlopen("libz.so"); #endif if (__zlib_dll == NULL) logger_fatal("load zlib.dll error: %s", acl_last_serror()); __deflateInit = (deflateInit_fn) acl_dlsym(__zlib_dll, "deflateInit_"); if (__deflateInit == NULL) logger_fatal("load deflateInit from zlib.dll error: %s", acl_last_serror()); __deflate = (deflate_fn) acl_dlsym(__zlib_dll, "deflate"); if (__deflate == NULL) logger_fatal("load deflate from zlib.dll error: %s", acl_last_serror()); __deflateReset = (deflateReset_fn) acl_dlsym(__zlib_dll, "deflateReset"); if (__deflateReset == NULL) logger_fatal("load deflateReset from zlib.dll error: %s", acl_last_serror()); __deflateEnd = (deflateEnd_fn) acl_dlsym(__zlib_dll, "deflateEnd"); if (__deflateEnd == NULL) logger_fatal("load deflateEnd from zlib.dll error: %s", acl_last_serror()); __inflateInit = (inflateInit_fn) acl_dlsym(__zlib_dll, "inflateInit2_"); if (__inflateInit == NULL) logger_fatal("load inflateInit from zlib.dll error: %s", acl_last_serror()); __inflate = (inflate_fn) acl_dlsym(__zlib_dll, "inflate"); if (__inflate == NULL) logger_fatal("load inflate from zlib.dll error: %s", acl_last_serror()); __inflateReset = (inflateReset_fn) acl_dlsym(__zlib_dll, "inflateReset"); if (__inflateReset == NULL) logger_fatal("load inflateReset from zlib.dll error: %s", acl_last_serror()); __inflateEnd = (inflateEnd_fn) acl_dlsym(__zlib_dll, "inflateEnd"); if (__inflateEnd == NULL) logger_fatal("load inflateEnd from zlib.dll error: %s", acl_last_serror()); logger("zlib.dll loaded"); atexit(__zlib_dll_unload); }
// 动态加载 sqlite3.dll 库 static void __sqlite_dll_load(void) { if (__sqlite_dll != NULL) logger_fatal("__sqlite_dll not null"); const char* path; const char* ptr = acl::db_handle::get_loadpath(); if (ptr) path = ptr; else #ifdef ACL_WINDOWS path = "sqlite3.dll"; #else path = "sqlite3.so"; #endif __sqlite_dll = acl_dlopen(path); if (__sqlite_dll == NULL) logger_fatal("load %s error: %s", path, acl_last_serror()); __sqlite3_libversion = (sqlite3_libversion_fn) acl_dlsym(__sqlite_dll, "sqlite3_libversion"); if (__sqlite3_libversion == NULL) logger_fatal("load sqlite3_libversion from %s error: %s", path, acl_last_serror()); __sqlite3_open = (sqlite3_open_fn) acl_dlsym(__sqlite_dll, "sqlite3_open"); if (__sqlite3_open == NULL) logger_fatal("load sqlite3_open from %s error: %s", path, acl_last_serror()); __sqlite3_close = (sqlite3_close_fn) acl_dlsym(__sqlite_dll, "sqlite3_close"); if (__sqlite3_close == NULL) logger_fatal("load sqlite3_close from %s error: %s", path, acl_last_serror()); __sqlite3_get_table = (sqlite3_get_table_fn) acl_dlsym(__sqlite_dll, "sqlite3_get_table"); if (__sqlite3_get_table == NULL) logger_fatal("load sqlite3_get_table from %s error: %s", path, acl_last_serror()); __sqlite3_free_table = (sqlite3_free_table_fn) acl_dlsym(__sqlite_dll, "sqlite3_free_table"); if (__sqlite3_free_table == NULL) logger_fatal("load sqlite3_free_table from %s error: %s", path, acl_last_serror()); __sqlite3_busy_handler = (sqlite3_busy_handler_fn) acl_dlsym(__sqlite_dll, "sqlite3_busy_handler"); if (__sqlite3_busy_handler == NULL) logger_fatal("load sqlite3_busy_handler from %s error: %s", path, acl_last_serror()); __sqlite3_errmsg = (sqlite3_errmsg_fn) acl_dlsym(__sqlite_dll, "sqlite3_errmsg"); if (__sqlite3_errmsg == NULL) logger_fatal("load sqlite3_errmsg from %s error: %s", path, acl_last_serror()); __sqlite3_errcode = (sqlite3_errcode_fn) acl_dlsym(__sqlite_dll, "sqlite3_errcode"); if (__sqlite3_errcode == NULL) logger_fatal("load sqlite3_errcode from %s error: %s", path, acl_last_serror()); __sqlite3_changes = (sqlite3_changes_fn) acl_dlsym(__sqlite_dll, "sqlite3_changes"); if (__sqlite3_changes == NULL) logger_fatal("load sqlite3_changes from %s error: %s", path, acl_last_serror()); __sqlite3_total_changes = (sqlite3_total_changes_fn) acl_dlsym(__sqlite_dll, "sqlite3_total_changes"); if (__sqlite3_total_changes == NULL) logger_fatal("load sqlite3_total_changes from %s error: %s", path, acl_last_serror()); logger("%s loaded", path); atexit(__sqlite_dll_unload); }
// 动态加载 sqlite3.dll 库 static void __sqlite_dll_load(void) { if (__sqlite_dll != NULL) logger_fatal("__sqlite_dll not null"); __sqlite_dll = acl_dlopen("sqlite3.dll"); if (__sqlite_dll == NULL) logger_fatal("load sqlite3.dll error: %s", acl_last_serror()); __sqlite3_libversion = (sqlite3_libversion_fn) acl_dlsym(__sqlite_dll, "sqlite3_libversion"); if (__sqlite3_libversion == NULL) logger_fatal("load sqlite3_libversion from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_open = (sqlite3_open_fn) acl_dlsym(__sqlite_dll, "sqlite3_open"); if (__sqlite3_open == NULL) logger_fatal("load sqlite3_open from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_close = (sqlite3_close_fn) acl_dlsym(__sqlite_dll, "sqlite3_close"); if (__sqlite3_close == NULL) logger_fatal("load sqlite3_close from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_get_table = (sqlite3_get_table_fn) acl_dlsym(__sqlite_dll, "sqlite3_get_table"); if (__sqlite3_get_table == NULL) logger_fatal("load sqlite3_get_table from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_free_table = (sqlite3_free_table_fn) acl_dlsym(__sqlite_dll, "sqlite3_free_table"); if (__sqlite3_free_table == NULL) logger_fatal("load sqlite3_free_table from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_busy_handler = (sqlite3_busy_handler_fn) acl_dlsym(__sqlite_dll, "sqlite3_busy_handler"); if (__sqlite3_busy_handler == NULL) logger_fatal("load sqlite3_busy_handler from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_errmsg = (sqlite3_errmsg_fn) acl_dlsym(__sqlite_dll, "sqlite3_errmsg"); if (__sqlite3_errmsg == NULL) logger_fatal("load sqlite3_errmsg from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_errcode = (sqlite3_errcode_fn) acl_dlsym(__sqlite_dll, "sqlite3_errcode"); if (__sqlite3_errcode == NULL) logger_fatal("load sqlite3_errcode from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_changes = (sqlite3_changes_fn) acl_dlsym(__sqlite_dll, "sqlite3_changes"); if (__sqlite3_changes == NULL) logger_fatal("load sqlite3_changes from sqlite3.dll error: %s", acl_last_serror()); __sqlite3_total_changes = (sqlite3_total_changes_fn) acl_dlsym(__sqlite_dll, "sqlite3_total_changes"); if (__sqlite3_total_changes == NULL) logger_fatal("load sqlite3_total_changes from sqlite3.dll error: %s", acl_last_serror()); logger("sqlite3.dll loaded"); atexit(__sqlite_dll_unload); }
// 动态加载 libpg.dll 库 static void __pgsql_dll_load(void) { if (__pgsql_dll != NULL) { logger("pgsql(%s) has been loaded!", __pgsql_path.c_str()); return; } const char* path; const char* ptr = acl::db_handle::get_loadpath(); if (ptr) path = ptr; else #ifdef ACL_WINDOWS path = "libpg.dll"; #else path = "libpg.so"; #endif __pgsql_dll = acl_dlopen(path); if (__pgsql_dll == NULL) logger_fatal("load %s error: %s", path, acl_dlerror()); // 记录动态库路径,以便于在动态库卸载时输出库路径名 __pgsql_path = path; __dbconnect = (PQconnectdb_fn) acl_dlsym(__pgsql_dll, "PQconnectdb"); if (__dbconnect == NULL) logger_fatal("load PQconnectdb from %s error %s", path, acl_dlerror()); __dbstatus = (PQstatus_fn) acl_dlsym(__pgsql_dll, "PQstatus"); if (__dbstatus == NULL) logger_fatal("load PQstatus from %s error %s", path, acl_dlerror()); __dbexec = (PQexec_fn) acl_dlsym(__pgsql_dll, "PQexec"); if (__dbexec == NULL) logger_fatal("load PQexec from %s error %s", path, acl_dlerror()); __dbresult_status = (PQresultStatus_fn) acl_dlsym(__pgsql_dll, "PQresultStatus"); if (__dbresult_status == NULL) logger_fatal("load PQresultStatus from %s error %s", path, acl_dlerror()); __dberror_message = (PQerrorMessage_fn) acl_dlsym(__pgsql_dll, "PQerrorMessage"); if (__dberror_message == NULL) logger_fatal("load PQerrorMessage from %s error %s", path, acl_dlerror()); __dbfinish = (PQfinish_fn) acl_dlsym(__pgsql_dll, "PQfinish"); if (__dbfinish == NULL) logger_fatal("load PQfinish_fn from %s error %s", path, acl_dlerror()); __dbclear = (PQclear_fn) acl_dlsym(__pgsql_dll, "PQclear"); if (__dbclear == NULL) logger_fatal("load PQclear from %s error %s", path, acl_dlerror()); __dbnfields = (PQnfields_fn) acl_dlsym(__pgsql_dll, "PQnfields"); if (__dbnfields == NULL) logger_fatal("loas PQnfields from %s error %s", path, acl_dlerror()); __dbfname = (PQfname_fn) acl_dlsym(__pgsql_dll, "PQfname"); if (__dbfname == NULL) logger_fatal("load PQfname from %s error %s", path, acl_dlerror()); __dbntuples = (PQntuples_fn) acl_dlsym(__pgsql_dll, "PQntuples"); if (__dbntuples == NULL) logger_fatal("load PQntuples from %s error %s", path, acl_dlerror()); __dbget_value = (PQgetvalue_fn) acl_dlsym(__pgsql_dll, "PQgetvalue"); if (__dbget_value == NULL) logger_fatal("load PQgetvalue from %s error %s", path, acl_dlerror()); __dbcmd_tuples = (PQcmdTuples_fn) acl_dlsym(__pgsql_dll, "PQcmdTuples"); if (__dbcmd_tuples == NULL) logger_fatal("load PQcmdTuples from %s error %s", path, acl_dlerror()); logger("%s loaded!", path); atexit(__pgsql_dll_unload); }
// 动态加载 libmysql.dll 库 static void __mysql_dll_load(void) { if (__mysql_dll != NULL) logger_fatal("__mysql_dll not null"); __mysql_dll = acl_dlopen("libmysql.dll"); if (__mysql_dll == NULL) logger_fatal("load libmysql.dll error: %s", acl_last_serror()); __mysql_libversion = (mysql_libversion_fn) acl_dlsym(__mysql_dll, "mysql_get_client_version"); if (__mysql_libversion == NULL) logger_fatal("load mysql_get_client_version from libmysql.dll error: %s", acl_last_serror()); __mysql_client_info = (mysql_client_info_fn) acl_dlsym(__mysql_dll, "mysql_get_client_info"); if (__mysql_client_info == NULL) logger_fatal("load mysql_get_client_info from libmysql.dll error: %s", acl_last_serror()); __mysql_init = (mysql_init_fn) acl_dlsym(__mysql_dll, "mysql_init"); if (__mysql_init == NULL) logger_fatal("load mysql_init from libmysql.dll error: %s", acl_last_serror()); __mysql_open = (mysql_open_fn) acl_dlsym(__mysql_dll, "mysql_real_connect"); if (__mysql_open == NULL) logger_fatal("load mysql_real_connect from libmysql.dll error: %s", acl_last_serror()); __mysql_close = (mysql_close_fn) acl_dlsym(__mysql_dll, "mysql_close"); if (__mysql_close == NULL) logger_fatal("load mysql_close from libmysql.dll error: %s", acl_last_serror()); __mysql_options = (mysql_options_fn) acl_dlsym(__mysql_dll, "mysql_options"); if (__mysql_options == NULL) logger_fatal("load mysql_options from libmysql.dll error: %s", acl_last_serror()); __mysql_autocommit = (mysql_autocommit_fn) acl_dlsym(__mysql_dll, "mysql_autocommit"); if (__mysql_autocommit == NULL) logger_fatal("load mysql_autocommit from libmysql.dll error: %s", acl_last_serror()); __mysql_errno = (mysql_errno_fn) acl_dlsym(__mysql_dll, "mysql_errno"); if (__mysql_errno == NULL) logger_fatal("load mysql_errno from libmysql.dll error: %s", acl_last_serror()); __mysql_error = (mysql_error_fn) acl_dlsym(__mysql_dll, "mysql_error"); if (__mysql_error == NULL) logger_fatal("load mysql_error from libmysql.dll error: %s", acl_last_serror()); __mysql_query = (mysql_query_fn) acl_dlsym(__mysql_dll, "mysql_query"); if (__mysql_query == NULL) logger_fatal("load mysql_query from libmysql.dll error: %s", acl_last_serror()); __mysql_num_fields = (mysql_num_fields_fn) acl_dlsym(__mysql_dll, "mysql_num_fields"); if (__mysql_num_fields == NULL) logger_fatal("load mysql_num_fields from libmysql.dll error: %s", acl_last_serror()); __mysql_fetch_fields = (mysql_fetch_fields_fn) acl_dlsym(__mysql_dll, "mysql_fetch_fields"); if (__mysql_fetch_fields == NULL) logger_fatal("load mysql_fetch_fields from libmysql.dll error: %s", acl_last_serror()); __mysql_fetch_row = (mysql_fetch_row_fn) acl_dlsym(__mysql_dll, "mysql_fetch_row"); if (__mysql_fetch_row == NULL) logger_fatal("load mysql_fetch_row from libmysql.dll error: %s", acl_last_serror()); __mysql_store_result = (mysql_store_result_fn) acl_dlsym(__mysql_dll, "mysql_store_result"); if (__mysql_store_result == NULL) logger_fatal("load mysql_store_result from libmysql.dll error: %s", acl_last_serror()); __mysql_num_rows = (mysql_num_rows_fn) acl_dlsym(__mysql_dll, "mysql_num_rows"); if (__mysql_num_rows == NULL) logger_fatal("load mysql_num_rows from libmysql.dll error: %s", acl_last_serror()); __mysql_free_result = (mysql_free_result_fn) acl_dlsym(__mysql_dll, "mysql_free_result"); if (__mysql_free_result == NULL) logger_fatal("load mysql_free_result from libmysql.dll error: %s", acl_last_serror()); __mysql_affected_rows = (mysql_affected_rows_fn) acl_dlsym(__mysql_dll, "mysql_affected_rows"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_affected_rows from libmysql.dll error: %s", acl_last_serror()); __mysql_set_character_set = (mysql_set_character_set_fn) acl_dlsym(__mysql_dll, "mysql_set_character_set"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_set_character_set_fn from libmysql.dll error: %s", acl_last_serror()); __mysql_character_set_name = (mysql_character_set_name_fn) acl_dlsym(__mysql_dll, "mysql_character_set_name"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_character_set_name from libmysql.dll error: %s", acl_last_serror()); logger("libmysql.dll loaded"); atexit(__mysql_dll_unload); }
// 动态加载 libmysql.dll 库 static void __mysql_dll_load(void) { if (__mysql_dll != NULL) { logger("mysql(%s) has been loaded!", __mysql_path.c_str()); return; } const char* path; const char* ptr = acl::db_handle::get_loadpath(); if (ptr) path = ptr; else #ifdef ACL_WINDOWS path = "libmysql.dll"; #else path = "libmysqlclient_r.so"; #endif __mysql_dll = acl_dlopen(path); if (__mysql_dll == NULL) logger_fatal("load %s error: %s", path, acl_dlerror()); // 记录动态库路径,以便于在动态库卸载时输出库路径名 __mysql_path = path; __mysql_libversion = (mysql_libversion_fn) acl_dlsym(__mysql_dll, "mysql_get_client_version"); if (__mysql_libversion == NULL) logger_fatal("load mysql_get_client_version from %s error: %s", path, acl_dlerror()); __mysql_client_info = (mysql_client_info_fn) acl_dlsym(__mysql_dll, "mysql_get_client_info"); if (__mysql_client_info == NULL) logger_fatal("load mysql_get_client_info from %s error: %s", path, acl_dlerror()); __mysql_init = (mysql_init_fn) acl_dlsym(__mysql_dll, "mysql_init"); if (__mysql_init == NULL) logger_fatal("load mysql_init from %s error: %s", path, acl_dlerror()); __mysql_open = (mysql_open_fn) acl_dlsym(__mysql_dll, "mysql_real_connect"); if (__mysql_open == NULL) logger_fatal("load mysql_real_connect from %s error: %s", path, acl_dlerror()); __mysql_close = (mysql_close_fn) acl_dlsym(__mysql_dll, "mysql_close"); if (__mysql_close == NULL) logger_fatal("load mysql_close from %s error: %s", path, acl_dlerror()); __mysql_options = (mysql_options_fn) acl_dlsym(__mysql_dll, "mysql_options"); if (__mysql_options == NULL) logger_fatal("load mysql_options from %s error: %s", path, acl_dlerror()); __mysql_autocommit = (mysql_autocommit_fn) acl_dlsym(__mysql_dll, "mysql_autocommit"); if (__mysql_autocommit == NULL) logger_fatal("load mysql_autocommit from %s error: %s", path, acl_dlerror()); __mysql_errno = (mysql_errno_fn) acl_dlsym(__mysql_dll, "mysql_errno"); if (__mysql_errno == NULL) logger_fatal("load mysql_errno from %s error: %s", path, acl_dlerror()); __mysql_error = (mysql_error_fn) acl_dlsym(__mysql_dll, "mysql_error"); if (__mysql_error == NULL) logger_fatal("load mysql_error from %s error: %s", path, acl_dlerror()); __mysql_query = (mysql_query_fn) acl_dlsym(__mysql_dll, "mysql_query"); if (__mysql_query == NULL) logger_fatal("load mysql_query from %s error: %s", path, acl_dlerror()); __mysql_num_fields = (mysql_num_fields_fn) acl_dlsym(__mysql_dll, "mysql_num_fields"); if (__mysql_num_fields == NULL) logger_fatal("load mysql_num_fields from %s error: %s", path, acl_dlerror()); __mysql_fetch_fields = (mysql_fetch_fields_fn) acl_dlsym(__mysql_dll, "mysql_fetch_fields"); if (__mysql_fetch_fields == NULL) logger_fatal("load mysql_fetch_fields from %s error: %s", path, acl_dlerror()); __mysql_fetch_row = (mysql_fetch_row_fn) acl_dlsym(__mysql_dll, "mysql_fetch_row"); if (__mysql_fetch_row == NULL) logger_fatal("load mysql_fetch_row from %s error: %s", path, acl_dlerror()); __mysql_store_result = (mysql_store_result_fn) acl_dlsym(__mysql_dll, "mysql_store_result"); if (__mysql_store_result == NULL) logger_fatal("load mysql_store_result from %s error: %s", path, acl_dlerror()); __mysql_num_rows = (mysql_num_rows_fn) acl_dlsym(__mysql_dll, "mysql_num_rows"); if (__mysql_num_rows == NULL) logger_fatal("load mysql_num_rows from %s error: %s", path, acl_dlerror()); __mysql_free_result = (mysql_free_result_fn) acl_dlsym(__mysql_dll, "mysql_free_result"); if (__mysql_free_result == NULL) logger_fatal("load mysql_free_result from %s error: %s", path, acl_dlerror()); __mysql_affected_rows = (mysql_affected_rows_fn) acl_dlsym(__mysql_dll, "mysql_affected_rows"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_affected_rows from %s error: %s", path, acl_dlerror()); __mysql_set_character_set = (mysql_set_character_set_fn) acl_dlsym(__mysql_dll, "mysql_set_character_set"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_set_character_set_fn %s error: %s", path, acl_dlerror()); __mysql_character_set_name = (mysql_character_set_name_fn) acl_dlsym(__mysql_dll, "mysql_character_set_name"); if (__mysql_affected_rows == NULL) logger_fatal("load mysql_character_set_name from %s error: %s", path, acl_dlerror()); __mysql_thread_init = (mysql_thread_init_fn) acl_dlsym(__mysql_dll, "mysql_thread_init"); if (__mysql_thread_init == NULL) logger_warn("load mysql_thread_init from %s error: %s", path, acl_dlerror()); __mysql_thread_end = (mysql_thread_end_fn) acl_dlsym(__mysql_dll, "mysql_thread_end"); if (__mysql_thread_end == NULL) logger_warn("load mysql_thread_end from %s error: %s", path, acl_dlerror()); __mysql_server_init = (mysql_server_init_fn) acl_dlsym(__mysql_dll, "mysql_server_init"); if (__mysql_server_init == NULL) logger_warn("load mysql_server_init from %s error: %s", path, acl_dlerror()); __mysql_server_end = (mysql_server_end_fn) acl_dlsym(__mysql_dll, "mysql_server_end"); if (__mysql_server_end == NULL) logger_warn("load mysql_server_end from %s error: %s", path, acl_dlerror()); logger("%s loaded!", path); atexit(__mysql_dll_unload); }