프로그램/mysql

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

(주)CKBcorp., 2013. 8. 5. 05:30
반응형


제목 그대로임. 
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);
}


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 

끝. 


 


반응형