正常编译代码无报错,可关闭mysql 连接,将代码复制到kore框架内,访问后报错空指针
MYSQL *conn; //数据库连接句柄
MYSQL_RES *res; //执行数据库语言结果
MYSQL_ROW row; //存放一个数据记录
char* server = "localhost";//本地连接
char* user = "root";//
char* password = "Root@123";//mysql密码
char* database = "mysql";//数据库名
char* query = "select * from user";//需要查询的语句
conn=mysql_init(NULL); //句柄初始化
int t;
if (!mysql_real_connect(conn, server, user, password, database, 3306, NULL, 0)) //判断数据库是否连接成功
{
printf("Error connecting to database:%s\n", mysql_error(conn));
}
else {
printf("Connected...\n");
}
mysql_real_query(conn,"select version()",strlen("select version()"));
printf("start close mysql connect!!\n");
mysql_close(conn);
printf("close connect success!!!\n");
1、怀疑初始化错误,没有正确初始化连接 修改过mysql_init(conn)的方式,无法解决报错
2、怀疑方法覆盖的问题,kore自己也有一个mysql_close,实际调用了kore的mysql_close,所以报错,使用grep查找全盘文件,没有找到同名方法
3、怀疑服务器环境问题,开通亚马逊云服务器,没有解决上述问题
4、百度和google了一天半左右时间,感觉以自己的能力无法解决以上问题
5、使用gdb调试kore生成的so文件,技术不够,进入后page方法后,就开始报错,并且tui无法查看源码。没有找出问题所在
kore框架代码: http://106.52.183.65:82/kore-4.2.1.zip
解压后使用make && make install即可安装kodev ,服务器需要安装mysql服务
testcode代码信息: http://106.52.183.65:82/testcode.zip
进入test目录,编辑./test/conf/test.conf,将服务监听地址修改为自己的服务器内网IP地址即可启动服务
kodev run ;服务启动命令
Kore 配置选项可以通过 kore.config 模块进行设置。
Root Kore 服务器运行的根路径(通过 chroot 或 chdir)。如果未设置,则为当前工作目录。
runas 工作进程将作为用户运行。如果未设置,则为当前用户。
workers 要使用的工作进程数。如果未设置,则系统中的 CPU 内核数。
worker_max_connections 一个工作进程在拒绝接受更多连接之前拥有的最大活动连接数。
worker_rlimit_nofiles 每个工作人员打开文件描述符的最大数量。
worker_accept_threshold 在单个事件循环中接受的最大新连接数。
worker_death_policy worker 的死亡策略,默认为“restart”。如果设置为“终止”将导致 Kore 服务器在异常工作人员终止时关闭。
worker_set_affinity Worker CPU 亲和性(0 或 1,默认为 1)。
pidfile 服务器将在其中写入父进程的 PID 的文件的路径。
socket_backlog 挂起的连接数。
tls_version 要使用的 TLS 版本(默认:两者,1.2 仅用于 TLSv1.2,1.3 仅用于 TLSv1.3)。
tls_cipher 要使用的 OpenSSL 密码套件列表。默认为一个非常健全的列表,只有 AEAD 密码和临时密钥交换。
tls_dhparam 供服务器使用的 DH 参数的路径。
rand_file 包含用于播种 PRNG 的熵的 2048 字节文件的路径。
keymgr_runas keymgr 进程将作为用户运行。如果未设置,则为当前用户。
keymgr_root keymgr 进程的根路径。如果未设置,则从根选项继承。
acme_runas acme 进程将作为用户运行。如果未设置,则为当前用户。
acme_root acme 进程的根路径。如果未设置,则从根选项继承。
acme_email 用于帐户注册的电子邮件地址。
acme_provider ACME 提供程序的目录的 URL。默认为让我们加密。
pledge OpenBSD,工作进程的承诺类别。
seccomp_tracing 仅限 Linux,seccomp 违规将被记录,并且不会导致进程终止。“是”或“否”。
filemap_ext 文件映射中文件的默认扩展名。
filemap_index 文件映射中的根文件。(例如 index.html)。
http_media_type 添加新的 HTTP 媒体类型(形式为“mediatype ext1 ext2 ext”)。
http_header_max HTTP 标头可以包含的最大字节数。如果请求带有大于此的标头,则连接将关闭。默认为 4096 字节。
http_header_timeout 如果没有收到 HTTP 标头,Kore 将关闭连接的秒数。默认为 10。
http_body_max HTTP 正文可以包含的最大字节数。如果请求的正文大于此值,则连接将关闭并返回 413 响应。默认为 1MB。
http_body_timeout 如果没有收到完整的 HTTP 正文,Kore 将关闭连接的秒数。默认为 60。
http_body_disk_offload Kore 将从该点开始将传入的 HTTP 主体卸载到磁盘上的文件而不是将其保存在内存中的字节数。默认禁用。
http_body_disk_path 如果启用了 http_body_disk_offload 设置,则写入临时正文文件的路径。
http_server_version 允许您覆盖 Kore 服务器标头。
http_pretty_error 如果设置为“yes”,将显示基于 HTML 的 HTTP 错误代码。默认为“否”。
deployment 应用程序的部署类型。“生产”或“开发”。生产设置将导致 Kore chroot 并删除权限并在后台运行。开发设置将在前台运行 Kore,并且只有 chdir 进入根设置。
可能是你本地mysql没有进行设置,需要将安装好的数据库设为外网或程序可连接模式,参考下图命令进行设置
1怀疑初始化错误,没有正确初始化连接 修改过mysql_init(conn)的方式,无法解决报错
检查一下数据库是否可能正常连接,可以用mysql客户端连接进行检查,root账号默认是不许远程连接的,需要配置一下。
可能是你用的这个版本有bug,更新到最新版,实测可行。