>> Edit article
이름
제목
패스워드
: mysql을 C에서 사용하고 싶습니다. : 아래의 간단한 예제를 코딩했습니다. : : #include "/usr/local/mysql/include/mysql/mysql.h" : : int main(void) : { : MYSQL mysql; : : mysql_init(&mysql); : mysql_options(&mysql,MYSQL_OPT_COMPRESS,0); : mysql_options(&mysql,MYSQL_READ_DEFAULT_GROUP,"odbc"); : if (!mysql_real_connect : (&mysql,"host","user","passwd","database",0,NULL,0)) : { : fprintf(stderr, "Failed to connect to database: Error: : %s", mysql_error(&mysql)); : } : } : : 그리고 /usr/local/mysql/lib/mysql/libmysqlclient.so 를 컴파일시에 같이 : link 시켰습니다. : : 그랬더니 컴파일은 잘 되는데, 실행시에 에러가 나네요 : : ./loginbypass.cgi: error in loading shared libraries: : libmysqlclient.so.10: cannot open shared object file: No such file or : directory : : 무엇이 문제일까요? : : PHP를 이용한 프로그래밍 예제나 정보들은 많은데 C 관련 예제나 정보는 찾 : 기가 힘들군요. 고수분의 도움을 바랍니다. 마침 요즘에.. c에서 mysql에 접근하는 부분을 짜고 있습니다. 소스 맨 앞머리에 있는 #include ... 부분은 그냥 mysql/mysql.h 라고 하셔도 됩니다. 단지, 컴파일 할때는 -I/usr/local/mysql/include (소문자 엘L 아닙니다. 대문자 아이i 입니다.) 를 명시하시면 됩니다. (오히려 이게 더 일반적일 수 있습니다. ) 그리고 -L/usr/local/mysql/lib/mysql -lmysqlclient 라는 옵션도 추가 하셔야 합니다. 여기까지는.. 이미 하셨던 내용이니까 이상은 없었을겁니다. 하지만.. 실제 구동을 시킬때 오류는?? 동적 라이브러리(동적공유라이브러리라고 해야 하나요?)를 사용하기 위해서는 시스템에서 동적 라이브러리에 대한 경로를 알고 있어야 합니다. 보통 윈도계열이라면 windows/system .. 이라는 곳에 dll 파일들이 있듯이 리눅스(혹은 다른 유닉스계열 시스템)에서도 동적라이브러리들이 들어있는 경로가 있습니다. 보통은 /usr/lib 쪽에 있긴 하겠지만, 그 외에 추가 되는 거라면 명시적으로 어디에 있다는 것을 알려줘야만 합니다. 리눅스라면? --------------- /etc/ld.so.conf 파일을 열어 보세요. 이 파일에 있는 내용은 기본 라이브러리 경로외에 추가적으로 사용할 라이브러리 경로에 대한 정보를 담고 있습니다. 여기에 mysql에서 사용하는 라이브러리의 경로를 추가하시면 됩니다. 이번 경우라면, /usr/local/mysql/lib/mysql 를 추가하시면 됩니다. 추가가 끝나면, ldconfig 라는 명령으로 경로 설정한것을 재인식(?)시켜줍니다. 리눅스가 아니거나 ld.so.conf 파일을 사용하지 않는다면? --------------------------------------------------------- 솔라리스의 경우라면... ld.so.conf 파일이 없습니다. 물론 ld.so 인가 하는게 있어서 동적 라이브러리를 로드시키는 부분이 있긴 하지만 리눅스와 같이 편리(?)하지는 않더군요. 다른 방법이 있을지는 모르겠지만 전 찾지 못했습니다. 그래서 솔라리스에서는 LD_LIBRARAY_PATH 에 추가 시켜 주시면 됩니다. 추가한 내용을 적용하려면 재접속을 하거나 source 를 이용해서 리소스 파일을 다시 읽어들이면 됩니다. 리눅스에서도 이 방법은 사용가능하긴 합니다. 주의!! 컴파일 하는것은 컴파일시에 어디서 라이브러리를 가지고 올것인지에 대해서면 명시합니다. 따라서 컴파일할때는 해보셨던것과 같이 명시적으로 어디에 있는것을 이용해서 쓰겠다고 했기 때문에 별다른 문제 없이 컴파일은 가능합니다. 하지만, 프로그램을 구동할때는 경로 정보를 가지고 있는게 아니기 때문에 기본 경로(혹은 지정한 경로)에서만 찾게 됩니다. 위에 두가지 방법을 제시하긴 했지만, 아직까지 저도 헛갈리는 부분이기 때문에 테스트하실때 옆에 메모하시면서 어떤 경우에 제대로 되는지 확인하셨으면 합니다.--리눅스를? 써봐?
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved