C와 mysql 을 연동했을때 컴파일 문제.....
글쓴이: nineorb / 작성시간: 화, 2003/07/08 - 1:56오후
배포본은 맨드레이크 9.1 쓰고 있습니다.
c를 이용해 mysql을 제어 하려고 cgi파일을 만들기 위해 컴파일을 하면
/tmp/ccoUo6GW.o(.text+0x45): In function `main':
: undefined reference to `mysql_connect'
collect2: ld returned 1 exit status
라고 달랑 세줄의 에러가 뜨는군요.... 장황하게 뜨면 뭔가가 잘못된건지
집작이라도 할수 있을거 같은데.... 달랑 세줄이라니...
컴파일 옵션은 다음과 같이 주었습니다.
gcc -o neon.cgi neon.c qDecoder.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient -lnsl
틀린것은 없는거 같은데 뭐가 잘못된건지 모르겠네요..
같은 환경에서 똑같은 옵션으로 컴파일 했을때 레드햇9는 잘됩니다...
코드는 다음과 같습니다.
#include <stdio.h> #include "mysql.h" #include "qDecoder.h" #define MAX_LENGTH 100 int main() { MYSQL_RES *result; MYSQL_ROW row; MYSQL connection; int i; char *name; char *num; char query[MAX_LENGTH]; qDecoder(); num=qValue("num"); mysql_connect(&connection,"localhost","root","dkdiskal"); mysql_select_db(&connection,"nineorb"); sprintf(query, "delete from name where num='%s'", num); mysql_query(&connection, query); // if(!(result=mysql_store_result(&connection))) memset(query, 0x00, sizeof(query)); sprintf(query, "select * from name order by num desc"); mysql_query(&connection, query); result=mysql_store_result(&connection); printf("content-Type:text/html\n\n"); printf("<HTML>"); printf("<BODY>"); printf("<table border=2 align=center>"); while((row=mysql_fetch_row(result))!=NULL) { printf("<tr>\n"); // for (i=0; i<mysql_num_fields(result);i++) printf("<td>%s</td>",row[0]); printf("<td>%s</td>",row[1]); printf("<td><a href=name_delete.cgi?num=%s>삭제</a></td>",row[0]); printf("<td><a href=name_update.cgi?num=%s&name=%s>수정</a></td>",row[0],row[1]); printf("</tr>\n"); } printf("</table>"); printf("<br>"); printf("</body>"); printf("</html>"); mysql_free_result(result); mysql_close(&connection); }
어떻게 해결해야 할까요??? 레드햇에서는 되는거 보니 뭔가 설정이
잘못된거 같은데..
Forums:
혹시...
-lm -lsocket 을 빼먹은건 아닌지요?
/etc/ld.so.conf
음 저도 예전에 비슷한 경험을 했었어요
mysql shared 라이브러리를 알려줘야 되요.
다시말하면 /etc/ld.so.conf에 libmysqlclient 위치를
적은다음에
ldconfig라는 명령어 한번 쳐주고 해보세요
꿈은 이루어진다.
Re: C와 mysql 을 연동했을때 컴파일 문제.....
혹시 libmysqlclient.a 가 없는것 아닙니까?
---
http://coolengineer.com
혹시
마지막에 -lm 이거 옵션을 줘야 한다는거 같은데
잘은 몰겠고요
제 mysql 책에는 글케 컴파일하는 모습이
승자는 자기보다 우월한 사람을 보면 존경심을 갖고 그로부터 배울 점을 찾지만 패자는 자기보다 우월한 사람을 만나면 질투심을 갖고 어디 구멍난 곳이 없는지 찾는다.
- 하비스
위의 분들 말씀처럼 mysql 라이브러리랑 인클루드 패스를 확인해보시는게
위의 분들 말씀처럼 mysql 라이브러리랑 인클루드 패스를 확인해보시는게 좋을듯합니다. 예전에 저도 비슷한 경험이 있었는데, 결국
-L/usr/local/mysql/lib/mysql
-I/usr/local/mysql/include/mysql
로 패스가 다르게 설치되어 있더군요.
ld.so.conf 에 추가하시고ldconfig 를 해주시던지
ld.so.conf 에 추가하시고
ldconfig 를 해주시던지
아니면 개인 쉘에(루트 권한이 없다면)
LD_LIBRARY_PATH 를 잡아주시면 됩니다.
고운하루되시길...
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기