gtk+ make 오류
글쓴이: hiscom / 작성시간: 목, 2005/06/30 - 4:10오후
glade로 위젯을 생성하고 시그널 등록해서 src/callbacks.c를 열어 시그널함수부분에 mysql 쿼리문을 작성 했습니다.
autogen.sh를 실행한니까 Makefile이 생기더군요.
열어서
PACKAGE_CFLAGS 에 -I/usr/include/mysql
PACKAGE_LIBS 에 -L/usr/lib/mysql -lmysqlclient
이렇게 추가 했습니다. // FC4 의 mysql 라이브러리 기본경로
make를 하니 다음처럼 오류가 생기네요.
undefined reference to 'mysql_real_connect' ....
mysql 함수 부분이 전부 그래요.
혹시나 해서 /usr/lib/include/모든파일 /usr/include/모든파일 을 카피해서 했는데도 마찬가지군요... ㅜㅜ
분명히 mysql.h에 함수 원형이 있는데 이상하네요.
참고로 텍스트기반에서는 잘 컴파일 됩니다.
gcc test.c -o test.c -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
File attachments:
첨부 | 파일 크기 |
---|---|
Makefile.txt | 19.87 KB |
Forums:
구글에서 비슷한 것을 찾았는데 봐주세요... ;;
저와 비슷한 상황 같은데요... 함 봐주세요.
-- 질문 --
-- 답변 --
몇시간째 해매고 있습니다.
도와 주세요.
컴파일은 되는데 링킹이 실패하는 거군요. 즉 헤더에는 함수 선언이 있으므
컴파일은 되는데 링킹이 실패하는 거군요. 즉 헤더에는 함수 선언이 있으므로 컴파일은 되는데, 실제 라이브러리에는 함수가 없어서 링킹을 못하는 상황이라고 의심됩니다. 일단은 헤더와 라이브러리의 버전이 일치하는지 확인해봐야 할 것 같습니다.
$ nm -D /usr/lib/mysqlclient.so | grep mysql_real_connect
해보십시요.
----
http://nohmad.tumblr.com/
답변 감사합니다.
해 보았습니다.
[hiscom@localhost]$nm -D /usr/lib/mysql/libmysqlclient.so | grep mysql_real_connect
00c07b24 T mysql_real_connect
[hiscom@localhost]$
결과가 이렇군요.
실제로 빌드될때 -lmysqlclient가 ld혹은 gcc옵션으로 들어가
실제로 빌드될때 -lmysqlclient가 ld혹은 gcc옵션으로 들어가는지 확인해보세요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
[quote="mithrandir"]실제로 빌드될때 -lmysqlclie
한번 그부분만 수동으로 해보세여
gcc xxxx -lmysqlclient이런식으로
즐린
해 보았습니다.
실제 빌드시 포함 되질 않는군요.
-I/usr/include/mysql
-L/usr/lib/mysql
-lmysqlclient
세개의 옵션이 하나도 들어가질 않는군요..ㅜㅜ
Make 파일에 대해선 거의 장님이에요...
configure 해 보아도 되질 않아요..
시간되시면 첨부된 파일좀 봐주세요. 어디에 sql라이브러리 경로를 삽입해야 될지???
GTK+ 재미 붙였다가 완존히 탈진했네요. ^^;
제가 glade를 잘 몰라서 질문을 제대로 이해하지 못했습니다. 알고보니
제가 glade를 잘 몰라서 질문을 제대로 이해하지 못했습니다. 알고보니 autogen.sh란 게 glade가 자동으로 생성해주는 파일이군요. 한가지 알아두셔야 할 것은 glade는 인터페이스 빌드 도구일 뿐, 다른 상업적인 IDE에 포함된 인터페이스 디자이너 류처럼 사용자 로직과 통합되도록 사용하기는 힘들다는 점입니다.
glade는 인터페이스 외에는 사용자 프로그램에 대해 아무것도 알지 못하기 때문에, glade가 생성해준 소스(callbacks.[ch], interface.[ch], support.[ch])를 재사용하려면, src/Makefile.am에 필요한 라이브러리와 헤더 경로를 수동으로 포함시켜주면 될 것 같습니다. .am 파일은 원래 수동으로 작성하는 것이라 glade가 덮어쓰지 않습니다. INCLUDES와 xxx_LDADD 부분을 보세요.
그런데 사실 glade가 소스 자동 빌드를 지원하는 C/C++/Ada 등의 언어로 프로그램을 작성하더라도 glade가 생성한 골격(skeleton) 위에다 직접 구현하는 방식보다는 libglade를 이용하는 것이 좋습니다. 실제로 glade 자체에서도 이 방식을 추천하고 있습니다(프로젝트 옵션 메뉴의 C 옵션 항목을 보면, "Note: for large applications the use of libglade is recommended"라는 문구를 볼 수 있습니다). 여기서 libglade를 이용한다는 것은 glade 프로그램에서 디자인한 인터페이스에 대한 내용을 xml 형식으로 담고 있는 *.glade 파일을 이용한다는 얘기입니다. 다시 .glade 파일을 이용한다는 것은 프로그램 소스 안에 인터페이스 생성에 대한 부분이 정적으로 들어있는 것이 아니라, gtk 프로그램이 실행 중에 libglade를 통해 이 xml 파일을 해석해서 인터페이스를 빌드한다는 말입니다.
아무래도 프로그램 규모가 커지면, glade가 생성해준 골격 내에서 작업하는 것이 매우 답답하고, 비효율적으로 되기 쉬운데, libglade를 이용할 경우 인터페이스를 완전히 별개의 모듈로 생각할 수 있기 때문에 장점이 있습니다. .glade 포맷은 플랫폼/언어 독립적인 데다, 재사용성도 높기 때문에, 인터페이스의 복잡성이 커져도 실제 사용자 로직에 거의 영향을 주지 않으므로, 한 번 이 방식에 익숙해지는 것이 여러모로 좋다고 생각합니다. 그리고 이렇게 하는 것이 작은 작업들이 유기적으로 결합되서 전체 환경을 구성해가는 gnome/gtk의 철학에도 맞는 것 같습니다.
처음 질문 내용에서 많이 벗어났는데, 어쨌든 glade가 생성한 Makefile을 수정하지 말고, 직접 autotools를 이용해서 빌드 환경을 새로 만드는 것이 좋을 것 같습니다. 물론 autotools 매뉴얼은 읽어보셔야겠죠. 한국어 번역도 꽤 잘 되어 있습니다.
http://wiki.kldp.org/wiki.php/DocbookSgml/Autotools-KLDP http://gnome.or.kr/wiki/TheGnomeBuildEnvironment
----
http://nohmad.tumblr.com/
답변 감사합니다.
좋은 지적 감사합니다.
소름이 쫙 돋네요. ^^ 너무 삽질했거든요...
다시 힘내서 할께요.
댓글 달기