[질문] 솔라리스 환경에서 mysql c api 이용하기.
음냐. 안녕하세요. 솔라리스에서 mysql 에서 제공하는 c api 을 이용해
프로그래밍을 해보려고 합니다. 막히내요. 일단 리눅스 서버에서
테스트로 작업을 했었는데 솔라리스에서는 잘 안되네요.
환경은 다음과 같습니다.
솔라리스 2.7
gcc 2.95.2
mysql-3.22.32-sun-solaris2.7-sparc.tar (바이러니 버전)
테스트 소스는 다음과 같습니다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <mysql.h> #include <errno.h> MYSQL mysql; void prolog(); void epilog(); void prolog() { mysql_init(&mysql); if(!mysql_real_connect(&mysql, NULL, "hurryon", "1111", NULL, 3306, (char *)NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(&mysql)); exit(1); } printf("DB Connected\n"); } void epilog() { mysql_close(&mysql); } int main(int argc, char *argv[]) { FILE *in, *out; /* static char line[10]; static char *keyword[100]; static char code_id[6]; static char precode_id[6]; */ int i, j, k, m; int docu_size, stat; int line_len, line_num; stat = 0; docu_size = 0; if(argc != 2) { fprintf(stderr, "m1 back_data\n"); exit(1); } if(!(in = fopen(argv[1], "r")) || !(out = fopen("data.info", "w"))) { fprintf(stderr, "input file not found or file create error\n"); exit(1); } prolog(); epilog(); return(0); }
에러는 다음과 같이 나옵니다.
nscode:~/work/mysql$ gcc -o m1 m1.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient
Á¤ÀÇ&ÇÁ& ¾ÊÀ½ ù¹ø° Â&Á¶&È
±&È& ÆÄÀÏÀÇ
socket /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
gethostbyname /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
setsockopt /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
getservbyname /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
floor /usr/local/mysql/lib/libmysqlclient.a(password.o)
getsockopt /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
inet_addr /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
shutdown /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
connect /usr/local/mysql/lib/libmysqlclient.a(libmysql.o)
ld: Ä¡¸&À&: ±&È& Â&Á¶ ¿À·&. m1¿¡ Ã&·ÂÀÌ ±&·Ï&ÇÁ& ¾ÊÀ½
collect2: ld returned 1 exit status
nscode:~/work/mysql$
으흠. 리눅스 테스트 서버에서는 잘 컴파일되고 실행이 된 소스인데...솔라리스
에서는 이렇게 에러가 나내요.
혹시 라이브러리가 등록되지 않아서 그런가요?
리눅스라면 /etc/ld.so.conf 파일에 등록 시켜놓고 ldconfig 로 등록을 시킬
텐데 솔라리스 환경은 처음이라.
고수님들의 가르침을 부탁합니다.
setenv LD_LIBRARY_PATH=$LD_LIBRARY_PATH:
setenv LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib
한번 해보세요. 솔라리스 만진지 10년이 지나서 맞는진 모르겠네요.
ㅋㅋ
음냐.
셸은 배쉬입니다. 그리고 .bashrc 파일에 다음과 같이 정의해 놓아 두었는
데도 마찬가지 입니다요.
ㅡ.ㅡ;;
export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:/usr/local/mysql/lib
에휴...
[quote]gcc -o m1 m1.c -I/usr/local/mys
에서..
gcc -o m1 m1.c -I/usr/local/mysql/include -L/usr/local/mysql/lib -lmysqlclient -lsocket -lnsl -lm
추가
감사합니다.
-lsocket -lnsl -lm
옵션을 붙이니 컴파일이 제대로 됩니다!!! 감사합니다. 혹시 각각의
옵션이 무엇을 뜻하는지요?
:-)
socket,nsl,math라이브러리를 링크하는겁니다. ps..f
socket,nsl,math라이브러리를 링크하는겁니다.
ps..floor가 있었네요.. - -;
댓글 달기