머리말
데이터베이스에 연결 더 자바 사용 일반적이지만, C / C ++는 리눅스 운영 데이터베이스가 더 중요하다에, 많은 시간을 얻을 인터넷을 주로 자신의 방식을 통해 몇 가지 문제가 작성한 튜토리얼을 많이 확인하는 데 사용, 그리고 마지막으로 성공 할 수있다 MariaDB의 접속은, 그것이 기준으로 기록한다.
: 알리 클라우드 개발 환경, 냠 MariaDB를 사용하여 설치, 설치 튜토리얼 내가 다른 문서를 참조 CentOS7 64 웨이입니다 CentOS7 MariaDB 설치 및 구성
설치 도구를 찾습니다
리눅스 시스템의 일부 버전의 파일 경로를 찾을 신속하게 찾을 수 사용은 다음과 같은 오류를보고합니다 :
-bash: locate: command not found
그 이유는 mlocate이 패키지를 설치하지 않은, mlocate를 설치
yum -y install mlocate
설치 후 아직도 도움, 새로운 버그를보고 않습니다 발견 내용의 위치를 찾아보십시오
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
그 이유는 라이브러리를 업데이트, 라이브러리를 설치 한 후 업데이트되지 않습니다
updatedb
설치가 완료되면, 당신은 신속하게 찾아 사용하는 파일 경로를 찾을 수 있습니다
C ++ 연결 MariaDB
데이터베이스 프로그램에 대한 간단한 연결 봐
#include <stdlib.h>
#include <stdio.h>
#include "mysql/mysql.h"
int main( int argc, char *argv[] )
{
MYSQL *conn_ptr;
conn_ptr = mysql_init( NULL ); /* 连接初始化 */
if ( !conn_ptr )
{
fprintf( stderr, "mysql_init failed\n" );
return(EXIT_FAILURE);
}
conn_ptr = mysql_real_connect( conn_ptr, "x.x.x.x", "root", "passwd", "dbname", 0, NULL, 0 ); /* 建立实际连接 */
/* 参数分别为:初始化的连接句柄指针,主机名(或者IP),用户名,密码,数据库名,0,NULL,0)后面三个参数在默认安装mysql>的情况下不用改 */
if ( conn_ptr ){
printf( "Connection success\n" );
}
else{
printf( "Connection failed\n" );
}
mysql_close( conn_ptr ); /* 关闭连接 */
return(EXIT_SUCCESS);
}
MySQL로 연결하려면, 먼저 헤더 파일을 추가해야합니다 #include <mysql/mysql.h>
다음 메이크 파일에 추가 -I/usr/include/mysql
하고 -L/usr/lib64/mysql
및 -lmysqlclient
해결 다른 오류가 발생하는 경우, 마지막 질문은 아래를 참조하십시오
같은 :
CC=g++ #编译器
CFLAGS=-g #可以使用gdb调试
BIN=MicroChatServer #生成的可执行目标文件名
OBJS=sysutil.o #.c/.cpp文件对应的.o目标文件
LIBS=-I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient -ljsoncpp -lpthread #链接库
$(BIN):$(OBJS)
$(CC) $(CFLAGS) $^ -o $@ $(LIBS)
%.o:%.cpp
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean #清理所有目标文件和可执行文件
clean:
rm -f *.o $(BIN)
그런 다음 확인 성공적으로 실행할 수 있습니다
문제 해결
질문 1 :
connect1.c : 4 : 19 : 오류 : mysql.h : 그런 파일이나 디렉토리
프롬프트가 MySQL을 (STABLE) 패키지를 더 mysql.h 파일이 없기 때문에이 오류가 발생, mysql.h 발견되지 않으며, 이 패키지를 설치해야합니다 :
sudo yum install mysql-devel -y
그리고 그것을 찾을 수 있습니다 :
# locate mysql.h
/usr/include/mysql/mysql.h
당신이 헤더 파일을 찾을 수 있도록 (-I 헤더 파일의 지정된 위치를 검색에 있었다 의미를, 사람의 GCC 참조).
질문 2 :
다시 구축하는 시도는 오류가 발생했습니다 :
# gcc connect1.c -o connect1 -I/usr/include/mysql -lmysqlclient
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld 返回 1
DLL의 문제는, mysqlclient 링크 라이브러리를 찾을 수없는, 남자 GCC는 그래서는 mysqlclient 라이브러리의 위치를 찾을 수 있도록, 뒤쪽에 -L로 검색 위치를 지정 발견
# locate *mysqlclient*
/usr/lib64/mysql/libmysqlclient.so
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.0.0
/usr/lib64/mysql/libmysqlclient_r.so
여기에 일부 시스템에서, 설명하는 /usr/lib/mysql/
아래,하지만 난 CentOS7 64 비트에서 사용하고 /usr/lib64/mysql/
블로그 게시물의 많은 명확하게 언급하지 않았기 때문에, 당신은 mlocate 라이브러리의 위치를 확인 설치하려는 이유는 아래로,하지만, 직접 그는에 있다고 /usr/lib/mysql/
다음, 시스템의 일부에서 발생하는 것이 성공적으로 링크 오류 없습니다
위치를 찾은 후, 당신은 컴파일 할 수 있습니다 :
gcc connect1.c -o connect1 -I/usr/include/mysql -L/usr/lib64/mysql -lmysqlclient
그는 실행할 수 있도록, 성공적으로 컴파일하고 그 전에, 반드시 mysqld가 이미 실행되고 있는지 확인 :
sudo /etc/rc.d/init.d/mysqld restart
그리고 그 결과 실행 파일을 실행 :
./connect1
Connection success
우리는 성공적으로 연결하는 인쇄 정보의 좋은 디자인을 인쇄 할 수 있습니다. 이 성공적 C는 / C ++ 언어는 MySQL 데이터베이스에 연결