::소개  ::배달라이더공간  ::리눅스  ::프로그래밍 
::로그인     ::회원가입

 프로그래밍
::C,C++   ::소스   ::만든 프로그램   ::자유게시판
C 에서 mysql 사용에 관해 - 예제 -몇가지 에러 대응
겁나느린사람   좋아! 0   별로.. 0   2020-11-19 14:41:50
1: #include <stdio.h>
2: #include <mysql.h>
3: #include <errno.h>
4:
5: void main(void)
6: {
7: MYSQL mysql ;
8: MYSQL_RES* res ;
9: MYSQL_ROW row ;
10: int fields ;
11:
12: mysql_init(&mysql) ;
13:
14: if(!mysql_real_connect(&mysql, NULL, “사용자”,”암호”, “test”, 3306, (char *)NULL, 0))
15: {
16: printf(“%s\n”,mysql_error(&mysql));
17: exit(1) ;
18: }
19:
20: if(mysql_query(&mysql, “USE super”) )
// mysql_query()는 query 수행시에 에러가 나게 되면
// 0이 아닌 값을 리턴한다.
{
printf(“%s\n”, mysql_error(&mysql) ;
exit(1) ;
}
21: if(mysql_query(&mysql, “SELECT * FROM dome”) )
{
printf(“%s\n”, mysql_error(&mysql) ;
exit(1) ;
}
22:
23: res = mysql_store_result( &mysql ) ;
24: fields = mysql_num_fields(res) ;
25:
26: while( ( row = mysql_fetch_row( res ) ))
27: {
28: for( cnt = 0 ; cnt < fields ; ++cnt)
29: printf(“%12s “, row[cnt]) ;
30:
31: printf(“\n”) ;
32: }
33:
34: mysql_free_result( res ) ;
35: mysql_close(&mysql) ;
36: }


6. 문제 해결

이번에는 C API를 사용한 소스 코드를 컴파일할 때 혹은, 실행 도중 만나는 문제점을 해결할 수 있는 방법을 설명한다.

1) “con.c:2: mysql.h: 그런 파일이나 디렉토리가 없음”
이 경우는 mysql.h의 경로를 찾을 수 없어서 나는 에러이다. 다시 한번

mysql.h가 어디에 있는지 확인을 하고, -I옵션으로 그 경로를 지정해 주자.

-I옵션과 경로는 붙여 써야 한다.

2) “con.o(.text+0x11): undefined reference to `mysql_init’” 위와 같이
‘undefined reference......’ 라고 나오는 에러는 -lmysqlclient 옵션을 주지 않았

기 때문이다.

3) “ld: cannot open -lmysqlclient: 그런 파일이나 디렉토리가 없음” 위의 에러는
-L옵션 뒤에 붙은 라이브러리의 경로가 잘못 되었기 때문이다.
libmysqlclient.so 파일의 경로를 찾아서 그 경로로 지정을 해 주자.
-I 옵션과 마찬가지로 -L과 경로는 붙여 써야 한다. 위의 에러들은 컴파일시

에 옵션이 잘못되었을 경우 나오는 에러 메시지이다.
계속해서 프로그램의 실행 중에 나오는 에러 메시지를 보자.

4) “Can’t connect to local MySQL server (2)”
위의 에러는 MySQL의 서버에 연결을 할 수 없다는 메시지로서, MySQL 서

버의 데몬이 실행 중이지 않을 때 나오는 메시지이다.
safe_mysqld 명령 등을 이용하여 데몬을 실행시켜 주자.

5) “Access denied for user: ‘rot@localhost’ (Using password: YES)”
접근이 금지되었다는 메시지로서 사용자 아이디를 잘못 입력하였 거나, 혹

은 암호를 잘못 입력하였을 때 나오는 메시지이다.
MySQL의 사용자는 모두 mysql database의 user 테이블에 있으므로, 참고를

하여 적도록 하자.

6) “error in loading shared libraries libmysqlclient.so.6:
cannot open shared object file: No such file or directory”
MySQL의 라이브러리를 열지 못한다는 메시지이다. 컴파일 할 때 MySQL의

동적 라이브러리를 사용하느데, 동적 라이브러리이므로 실행시에도 라이브

러리가 필요하게 된다.
libmysqlclient.so가 /usr/lib 혹은 /usr/lib/mysql 디렉터리에 존재하지 않을

경우에 발생하는 문제이다. 가장 간단한 해결법으로는 모든 MySQL 라이브

러리를 /usr/lib/나 /usr/local/lib밑으로 복사하는 것인데 별로 추천하는

방법은 아니다.
두 가지 방법이 있는데,
먼저 시스템의 운영자라면, /etc/ld.so.conf 파일에libmysqlclient.so가있는 경

로를 적어 준 후에 ldconfig 라는 명령을 프롬프트에서 실행하여 주면 된다.

이러한 권한이 없는 일반 사용자라면, 자신의 쉘의 환경 변수를 이용하면 된

다.
각자의 쉘이 맞게, LD_LIBRARY_PATH를 libmysqlclient.so가 있는 디렉터리로
지정을 해주자.
C 쉘 사용자는 setenv LD_LIBRARY_PATH 경로명 본 쉘 사용자는
export LD_LIBRARY_PATH 경로명 이렇게 해주면 된다.
보통 위의 6개의 에러가 가장 많이 발생한다. 혹시, 해결하지 못할 에러가 있

다면 필자에게 메일을 보내면 친절히 답변해 주겠다.


출처: https://sacstory.tistory.com/entry/mysql-lib를-c에서-사용하기 [나긋한 개발자]



출처: https://sacstory.tistory.com/entry/mysql-lib를-c에서-사용하기 [나긋한 개발자]

  좋아!   별로..
 C 언어 파일입출력 기초 예제
 C 에서 mysql 사용에 관해