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 ^^ --- 고운 하루
=========================
댓글 달기