调用mysql_init(NULL)导致Wamp64环境下C程序崩溃求助
解决调用
mysql_init(NULL)时崩溃(错误码0xC0000135)的问题 问题根源
错误码0xC0000135明确表示程序运行时找不到必需的动态链接库(DLL)。你的调试目录中缺少libmariadb.dll,而老师的示例通过手动复制该DLL到编译目录解决了这个问题。
解决方案
1. 手动复制DLL(快速验证)
找到Wamp64安装目录下的libmariadb.dll:
C:/wamp64/bin/mariadb/mariadb10.6.5/lib/libmariadb.dll
将其复制到你的项目编译输出目录(比如cmake-build-debug或Release文件夹,取决于当前编译模式)。
2. 配置CMake自动复制DLL(长期方案)
修改CMakeLists.txt,添加自动复制DLL的指令,避免每次编译后手动拷贝:
cmake_minimum_required(VERSION 3.18) project(ProjectCESGI LANGUAGES C) find_package(PkgConfig REQUIRED) pkg_check_modules(GTK4 REQUIRED IMPORTED_TARGET gtk4) include_directories("C:/wamp64/bin/mariadb/mariadb10.6.5/include") link_directories("C:/wamp64/bin/mariadb/mariadb10.6.5/lib") # 编译后自动复制libmariadb.dll到程序运行目录 add_custom_command(TARGET ProjectCESGI POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "C:/wamp64/bin/mariadb/mariadb10.6.5/lib/libmariadb.dll" $<TARGET_FILE_DIR:ProjectCESGI> ) add_executable(ProjectCESGI main.c createMenu.h databaseMenu.h columnWidget.h) # 增加ws2_32库链接,MySQL C API依赖Windows Socket target_link_libraries(ProjectCESGI PRIVATE PkgConfig::GTK4 libmariadb ws2_32)
3. 修复代码中的空指针风险
mysql_init(NULL)可能返回NULL(初始化失败),后续调用mysql_options会触发崩溃,建议添加空指针检查和错误信息输出:
int main (int argc, char **argv) { GtkApplication *app; int status; MYSQL *mysql = mysql_init(NULL); if (!mysql) { g_print("mysql_init 初始化失败\n"); return 1; } mysql_options(mysql, MYSQL_READ_DEFAULT_GROUP, "option"); if (mysql_real_connect(mysql, "localhost", "root", "", NULL, 0, NULL, 0)) { g_print("Success"); mysql_close(mysql); } else { // 打印具体连接错误信息,便于排查 g_print("Failure: %s\n", mysql_error(mysql)); mysql_close(mysql); } // 后续GTK代码 app = gtk_application_new ("org.gtk.example", G_APPLICATION_DEFAULT_FLAGS); g_signal_connect (app, "activate", G_CALLBACK (activate), NULL); status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); return status; }
额外检查点
- 确认项目编译架构为64位(与Wamp64的64位版本匹配),如果是32位编译,需使用对应32位的MariaDB库。
- 确保Wamp64中的MariaDB服务处于运行状态。
内容的提问来源于stack exchange,提问作者Chachoune963
相关产品推荐
相关产品推荐

