关于用C语言操作mysql时候的编译问题; undefined reference to `mysql_init‘等

首先是问题:
代码如下

[root@petrichor test]# more test2.c
#include <stdio.h>
#include <mysql/mysql.h>
 
int main(int argc, const char *argv[])
{
    MYSQL   mysql;
 
    if (NULL == mysql_init(&mysql)) {    //分配和初始化MYSQL对象
        printf("mysql_init(): %s\n", mysql_error(&mysql));
        return -1;
    }
 
    //尝试与运行在主机上的MySQL数据库引擎建立连接
    if (NULL == mysql_real_connect(&mysql,
                "localhost",//host
                "root",     //user
                "双引号内是密码", //passward
                "test", //database
                0,          //port
                NULL,       //unix_socket
                0)) {       //client_flag
        printf("mysql_real_connect(): %s\n", mysql_error(&mysql));
        return -1;
    }
 
    printf("Connected MySQL successful! \n");
 
    mysql_close(&mysql);
    return 0;
}

代码里用了几个函数像mysql_init()等等
直接编译如下

[root@petrichor test]# gcc -o test2 test2.c
/tmp/ccRafFJG.o: In function `main':
test2.c:(.text+0x23): undefined reference to `mysql_init'
test2.c:(.text+0x37): undefined reference to `mysql_error'
test2.c:(.text+0x7e): undefined reference to `mysql_real_connect'
test2.c:(.text+0x96): undefined reference to `mysql_error'
test2.c:(.text+0xc8): undefined reference to `mysql_close'
collect2: error: ld returned 1 exit status

接着是多数的解决方案,即加上-lmysqlclient
但是我解决不了

[root@petrichor test]# gcc -o test2 test2.c -lmysqlclient
/usr/bin/ld: cannot find -lmysqlclient
collect2: error: ld returned 1 exit status

使用mysql_config命令查看编译选项

[root@petrichor test]# mysql_config
Usage: /usr/bin/mysql_config-64 [OPTIONS]
Compiler: GNU 8.3.1
Options:
        --cflags         [-I/usr/include/mysql -m64 ]
        --cxxflags       [-I/usr/include/mysql -m64 ]
        --include        [-I/usr/include/mysql]
        --libs           [-L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl]
        --libs_r         [-L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl]
        --plugindir      [/usr/lib64/mysql/plugin]
        --socket         [/var/lib/mysql/mysql.sock]
        --port           [0]
        --version        [8.0.21]
        --variable=VAR   VAR is one of:
                pkgincludedir [/usr/include/mysql]
                pkglibdir     [/usr/lib64/mysql]
                plugindir     [/usr/lib64/mysql/plugin]

使用--libs对应的进行编译(本文解决办法

[root@petrichor test]# gcc -o test2 test2.c -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl
[root@petrichor test]# ls
test1.c  test2  test2.c
[root@petrichor test]# ./test2 
Connected MySQL successful! 
[root@petrichor test]# 

总结:还是对gcc命令一知半解~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题中提到了一个编译错误,错误信息是"undefined reference to `mysql_init'"。这个错误通常是由于编译器找不到对应的函数定义引起的。根据引用\[1\]中的代码和错误信息,可以看出在编译时缺少对MySQL库的链接。 为了解决这个问题,你可以按照引用\[2\]中提供的方法进行操作。首先,你需要安装MySQL客户端和相关的开发库。可以使用以下命令进行安装: ``` sudo apt install mysql-client sudo apt install libmysql++-dev sudo apt-get install libmysqlclient-dev sudo apt-get install libmysqld-dev ``` 安装完成后,你需要在代码中包含正确的头文件。根据引用\[2\]中的信息,你需要在代码中添加以下语句: ``` #include <mysql/mysql.h> ``` 然后,你需要在编译命令中添加对MySQL库的链接。根据引用\[1\]中的错误信息,你可以使用以下命令进行编译: ``` gcc -o test2 test2.c -lmysqlclient ``` 这样,编译器就能够找到并链接MySQL库,解决了"undefined reference to `mysql_init'"的问题。 #### 引用[.reference_title] - *1* *3* [关于用C语言操作mysql时候的编译问题undefined reference to `mysql_init‘等](https://blog.csdn.net/weixin_43832546/article/details/113916379)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [undefined reference to `mysql_init‘ 附解决方案](https://blog.csdn.net/csdndogo/article/details/130117970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值