그러냐

Linux 에서 C 컴파일용 mysql library + header file 구하기. 본문

C

Linux 에서 C 컴파일용 mysql library + header file 구하기.

관절분리 2021. 7. 13. 14:38
반응형

제목 그대로임.

linux 에서 mysql 용 코드를 작성해야 했는데, mysql 을 설치하니 이것이..... 실행 코드만 설치됨. 

컴파일용 코드는 따로 설치해야 하는 거다.

옆사람이 하다 안된다는 걸 넘겨받아 한 거라, 어떠한 설치 조합을 해야 컴파일이 가능한 버전을 설치할 수 있는지 몰랐는 터라, VM을 이용해서 패키징 설치 후 컴파일을 여러 조합의 수로 확인해 보았다. ( 설치 + complie + Table R/W 까지 확인)

 

 

1. 리눅스 설치.

2. apt-get install mysql-client mysql-server  

3. apt-get install libmysql++-dev

4. 이하의 C 코드로 mysql 라이브러리 설치 여부를 확인.

 

#include <my_global.h>

#include <mysql.h>

 

int main(int argc, char **argv)

{  

  MYSQL *con = mysql_init(NULL);

 

  if (con == NULL) 

  {

      fprintf(stderr, "%s\n", mysql_error(con));

      exit(1);

  }

 

  if (mysql_real_connect(con, "localhost", "root", "root_pswd", 

          NULL, 0, NULL, 0) == NULL) 

  {

      fprintf(stderr, "%s\n", mysql_error(con));

      mysql_close(con);

      exit(1);

  }  

 

  if (mysql_query(con, "CREATE DATABASE testdb")) 

  {

      fprintf(stderr, "%s\n", mysql_error(con));

      mysql_close(con);

      exit(1);

  }

  mysql_close(con);

  exit(0);

}

 

출처 : http://zetcode.com/db/mysqlc/

 

5. 컴파일 할 때는, 

 

gcc mysqltest.c -I/usr/include/mysql -lmysqlclient -L/usr/lib 

 

되겠다. -I/usr/include/mysql : 대문자 알파벳 아이. -lmysqlclient : 소문자 영문 엘.  )

 

저렇게 해 놓고, testdb가 생성되었는지를 확인하면 된다.

 

참고 :

1. mysql 에도 설치 가능한 developer 버전이 있는 듯 한데, (mysql-dev 비슷한 이름이었음) 설치해도 컴파일은 성공하지 아니하였다. 

2. 패키지 이름은 대동소이 하기 때문에, rpm 을 설치하도라도 이름은 비슷할 거다.

3. 혹시나 다른 버전이나 패키지를 설치했다면, find 명령으로  mysql.h 와 libmysql 을 찾아서 해당 디렉토리 명을 컴파일 할 때 추가하면 된다. 

 

# find / -name "mysql.h"

# find / -name "*libmysql*"

 

추가 1 :

cafe24 의 서버 호스팅의 centOS 에서 컴파일 해 보니까, 아래와 같은 에러 문구가 나왔다.

 

/usr/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient

/usr/bin/ld: cannot find -lmysqlclient

collect2: ld returned 1 exit status

 

뭐래... 분명히 -L 옵션으로 라이브러리 뒤지는 디렉토리 지정해 줬는데, 왜 mysqlclient 는 안된다는거야... 라고 생각하고 뒤져봤더니, 

라이브러리 버전이 안 맞아서 에러난 거라는군. 

결론은 32bit 용 라이브러리 주소 대신 64bit 용 주소 쓰란다. 아래와 같은 컴파일 옵션을 이용.

 

gcc mysqltest.c -I/usr/include/mysql -lmysqlclient -L/usr/lib64/mysql 

 

끝. 

 

 

출처 : https://ckbcorp.tistory.com/541

반응형

'C' 카테고리의 다른 글

Convert 2 bytes into an integer  (0) 2021.07.23
[C 언어] mysql c언어 api라이브러리 사용법  (0) 2021.07.15
MySQL lib를 리눅스 C에서 사용하기  (0) 2021.07.13
centos gcc 설치  (0) 2021.07.13