You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:10:50