发布网友 发布时间:2022-04-23 07:05
共4个回答
热心网友 时间:2022-04-29 23:37
老大,原来你连 C 的原理都不会啊?
C 语言所有调用函数,都要有声明,这种外部函数库的调用,都要用他们的 header 文件来声明函数变量等等的东西,编译器会根据实际情况去把这些程序里面的函数调用链接到函数库的正确位置上。
微软的产品因为他垄断了他自己系统的所有功能设计。所以他的系统+他的开发程序+他的开发函数库就不需要 header 文件了,因为它可以设计为 dll 本身含有足够的信息去干别的事情了。所以,你别以为你用了微软的 .net ,他就还是 C 语言了。他已经脱离了 C 语言的范围了。
GCC一般情况下是编译器,但编译器是不够的,还需要连接器的工作才行。binutils 里面的软件提供相关的功能。
要知道以前链接到函数库功能,光有 header 和函数库文件本体还是不行的,还需要另外的函数库信息文件来帮助编译器连接器来找到正确的函数入口位置才行的。
你编程 C ,你要选择你所使用的功能调用方法,GCC 一般调用 mysql 有调用外部 dll ,或者程序自己直接链接 mysql 端口,自己分析 mysql 服务进程发送的各种信息!
前一种办法,可以直接选择 mysql 客户端里面的 SDK 来直接获得官方的功能支持,但官方 MySQL 是 GPL 协议发布的,你使用他的功能接口后,你的程序也必须以 GPL 发布,不然你就要去选择其他的函数库,比如 ODBC 的 mysql 库。当然还有第三方的 mysql 功能库可以选择。
不过你要注意,LGPL 必须严格区分你的程序和 LGPL 代码。你必须动态链接到 LGPL 函数库。如果你的程序包含 LGPL 函数库一起发布,且 LGPL 库是你的软件的必备函数库,那么你的程序也必须开源,但不是 GPL 而是 LGPL !
不然你就选择自己写程序直接与 mysql 服务器进行数据传输,不使用第三方功能库。
但我不认为身为一个 Linux 下程序开发人员,会去傻傻的自己写功能函数而不是用现成的函数库。
你所遇到的“非要客户安装 mysql client ”,就是因为你的软件调用了一些非你自己编写的函数调用功能,而为了获取这些函数而需要安装几个 mysql 函数库的问题。
这个问题我想不应该是一个开发人员提出来的吧?
------------------------------------
楼主你还是重新学习 C 语言吧。.net 的 C 被微软改的不是真正的 C 语言了,所以你没办法按照 C 的标准去比较 .net 和 GCC 的。
而且很多 .net 的编程习惯也没办法延续到 GCC 的。
热心网友 时间:2022-04-30 00:55
和.net同样的道理,你在.net也需要在你的部署包中包含dll才能去连接,除非你静态联接了相关的code, 在linux下你需要下载mysql的C库开发包(libmysql++-dev libmysql++2c2a libmysqlclient15-dev libmysqlclient15off) 这里面已经包含了动态库和静态库,如果是静态库链接,你就只需要把你的程序部署给别人即可,如果是动态链接,还需要把相关的.so也包含在你的部署包中分发给使用者
热心网友 时间:2022-04-30 02:29
#include "/usr/local/mysql/include/mysql/mysql.h" /*为绝对路径*/
#include <stdio.h>
int main()
{
char *user = "vod", *pwd = "vod", *dbname = "vod", *host="211.161.159.106";
MYSQL mysql;
MYSQL_RES *mysql_ret;
MYSQL_ROW mysql_row;
unsigned long num_rows;
int ret;
mysql_init(&mysql);
if(mysql_real_connect(&mysql,host,user,pwd,dbname,0,NULL,0))
{
printf("Connection success!\n");
ret = mysql_query(&mysql,"select * from user");
if(!ret)
{
printf("Query Success!\n");
mysql_ret = mysql_store_result(&mysql);
if(mysql_ret != NULL)
{
printf("Store Result Success!\n");
num_rows = mysql_num_rows(mysql_ret);
if(num_rows != 0)
{
printf("%d\n",num_rows);
while(mysql_row = mysql_fetch_row(mysql_ret))
{
printf("%s\t%s\t%s\t%s\t%s\t%s\n",mysql_row[0],mysql_row[1],mysql_row[2],mysql_row[3],mysql_row[4],mysql_row[5]);
}
}
else
{
printf("mysql_num_rows Failed!\n");
return(-1);
}
mysql_free_result(mysql_ret);
return(0);
}
else
{
printf("Store Result Failed!\n");
return(-1);
}
}
else
{
printf("Query Failed!\n");
return(-1);
}
}
else
{
printf("Connection Failed\n");
return(-1);
}
}
自己看吧,写的我累死了,运行没问题的。流程都在里面了。你会用GCC编译器编译它吧?(废话,呵呵,不过注意带几个mysql下的动态链接库)
热心网友 时间:2022-04-30 04:21
Mysql安装完有一个lib文件夹和一个include文件夹,将头文件和库文件引入,就可以连接了。写完的程序放在没有mysql的地方也可以远程连接,不过参数要写对。mysql提供了一堆的C接口,封装下用就好。