Mingw(GCC) 포팅 성공 ... ?

OpenGL 한글 (입)출력 라이브러리 "glan"에 대한 포럼입니다.

Moderator: 류광

류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Mingw(GCC) 포팅 성공 ... ?

Post by 류광 »

Dev-C++의 VC++ 프로젝트 가져오기 기능 덕분에 수월하게 이식에 성공했습니다.... 소스 중 두 군데가 말썽이 있었는데 어쨌든 정적 라이브러리를 빌드했고 라이브러리를 링크하는 테스트 프로그램도 실행시켜 봤습니다.

오류 났던 두 부분은 제가 임의로 고쳤는데 다른 부분과의 관련성을 잘 모르는 상태에서 그냥 오류만 안나게 하는 식으로 고쳐서 조금 걱정이네요.

그 외에 경고가 두 개 뜨는데, 하나는 아무 의미 없는 코드라는 경고이고 (배정문도 아니고 함수 호출도 아닌 문장이 하나 있습니다) 또 하나는 NULL에 대한 것인데.. 그냥 무시했습니다.

그냥 현재 소스 코드의 이식성을 실험한다는 차원에서 해 보았구요.... crowy님이 소스포지의 CVS에 가장 최근의 코드를 올리시면 다시 시도해 볼려고 합니다....
crowy

아아.. 그렇군요..

Post by crowy »

일단.. 손을 보고 있지만..
요즘의 관심은 전체적인(GLAN과 큰관련은 없는)
gui화에 목적이 된것 같네요..;
그외에 주로 쉽게보이는 버그들을 손보고 있고요..
뭔가 근본적인 부분은 저도 손대기가 힘들군요..;;
요즘은 좀처럼 실력이 늘지도 않아서... (가장큰 이유군요; )

일단, 인터넷이 가능하게 되는날 CVS에 약간의 버그만이 고쳐진
버전을 올리도록 하겠습니다.. (쿨럭)
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

기다릴께요!

참 glancore 방식을 정식으로 채택하신다면 조금은 더 융통성있게 할 필요가 있을 것 같습니다(처음 만들 때 제가 단순화를 너무 강조했었던 것 같아요..-.-). 현재의 glancore 에서 문제점은

1. glanText 생성시 글꼴 파일을 임의로 지정할 수 없다.
2. 단일체가 강제된다.

1번은 쉽게 해결할 수 있는 문제이구요 (getInstance()가 글꼴 파일 이름을 받게 하는 등). 그러나 2번과 결합된다면 인터페이스가 좀 변할 수도.. 생성자를 public으로 노출시키는 등....

2 번은 한 프로그램에서 둘 이상의 글꼴들들 사용할 수 있게 하자.. 라는 측면에서의 문제인데, 단일체를 그냥 포기하거나, 아니면 단일체가 되어야 할 부분과 글꼴마다 달라질 부분을 분리하거나 등으로 고민이 필요할 것 같습니다.

코어 부분이 정리가 됨에 따라 저는 외부 클래스 래퍼를 통해서 스트림을 지원하게 하는 쪽으로 한 번 작업을 해보고 싶습니다. printf 스타일 대신 cout 스타일을 사용할 수 있게요...
crowy

Post by crowy »

1번의 생성시의 글꼴지정문제는.. 지난번에는 잘 해결이 안되었습니다.. 뭐랄까, 나중에 트루타입의 글꼴을 지원하게 된다고 하더라도, 어떤것을 기준으로 삼느냐라던가 하는 문제랄까요.. 게다가 처음으로 생성되어야 할 글꼴을 무엇으로 하느냐도 문제가 되고요..
그래서 생각하고 있는것이 아예 처음부터 글꼴을 읽어들이지 않도록 하는것입니다만.. 사용하기에 좀 불편함도 있군요.. 물론 여러 텍스트 객체를 관리하는 관리자를 만들면 해결되겠지만요... 아마 GUI를 만들게 되면서 그 부분을 만들게 될것 같습니다.. 그럼 그때 그것과 같이 하게 된다면 해결되지 않을까 생각되네요...
(그리고 기본글꼴의 경우는 소스 내부에 첨가해버리는 방법도 생각하고 있습니다..;; )

2번 문제의 경우, 외부 인터페이스부분과 실제 출력부분을 나누는것을 고려해볼만할것 같네요. 실제로 외부에 사용되는것은 글꼴정보등만을 저장하고.. 실제 출력은 단일체 클래스에서 하는형태로요...
단일체로 하려는 이유라면.. 기본으로 제공되는 내부 글꼴의 중복 자료량을 최소로 하기 위해서랄까요..

아마도 12월쯤에 새버전의 공개가 있을듯합니다..
(11월 말에 인터넷 공사를 한다고 하는군요..;;)
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

Dev-Cpp 로 포팅하면서 수정한 부분을 알려주실 수 없을런지요? ^^;;

가져오기로 프로젝트 변환해서 해보려 했는데 잘 안되네요.. =.=

아님 소스를 올려주셔도 감사하겠습니다!
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

아쉽게도 소스가 없어졌네요.... 다시 빌드해 봤는데 잘 안 됩니다. 다시 한 번 시도해 보고 잘 되면 패키지 형태로 만들어보겠습니다....
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

신경써 주셔서 감사합니다.. ^^

저도 다시 해봐야 할듯...
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

지금 현재 빌드는 되는데 테스트 프로그램에서 링크를 하면 런타임 오류가 나오는 상황입니다.... 아 참 여기 자료실의 glan core 1.0.16 hack 버전이구요.

컴파일 오류는 대략 이런 식으로 해결했습니다. 우선 프렌드 관련 오류는 그냥 friend를 지워서 해결했구요-.- 템플릿의 형 정의나 기타 여러 부분에서 자꾸 나오는 implicit typename 어쩌구는 해당 부분 앞에 typename 키워드를 추가했습니다.

GL_BGR_EXT 관련 오류는 gl.h를 최신 버전으로 갱신하는 게 정도이지만 그냥 gi_texture.h에서 #define으로 GL_BGR_EXT를 0x80E0를 정의했습니다.

대충 이정도였습니다. 실행 시 오류가 나는 원인은 아직 잘 모르겠습니다....
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

와우.. 감사합니다.. 류광님 글을 토대로 과감한(?) 수정을 가한 후

어찌 어찌하여 저도 빌드는 됐는데 예제를 돌려보려하니 링커에러가 자꾸 나는 것입니다.

그것도 어이없는 opengl 함수들에 대해서요. 프로젝트 옵션에도 -lopengl32 되어 있고..

딱히 고칠 부분도 없는거죠..

빌드한 라이브러리 이름은 libGLAN.a 로 했구요...

....

-lopengl32 지우고 빌드 한번 해보고( 오픈지엘 함수들 몽땅 링커에러..)

다시 -lopengl32 를 뒤에 추가하고 빌드하니... 됩니다. ㅡㅡ;;;

컴파일 옵션, 링커 옵션 싸그리 지우고 링커 옵션에 -lglan -lopengl32 라고

되어 있는 상태구요, 프로젝트는 당연히 win32 gui 선택해놨고..

링커에러 문제는 아마도 Dev-Cpp의 문제가 아니었나 생각이 됩니다..

암튼 감사합니닷!!
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

소스랑 라이브러리 여기 자료실에 올려주실래요? (아니면 기타 편한 곳에 올려주시고 링크를 걸어주시던가요...) 제가 DevPak으로 만들어 보겠습니다...
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

파일사이즈가 의외로 커서 그런지 자료실에 안올라가네요.. ^^;;

아래 링크에서 받아보심 될꺼고

http://batmask.co.kr/glan/GLAN-1.0.16mod.zip

저도 한번 패키징을 해봤는데 첨 해본거라 제대로 된건지도 모르겠습니다. ㅡㅡ;;

파일크기가 왜이리 작아지죠? bzip2가 좋은건지.. ;;;

받아보시고 된다면 제대로된 패키징 부탁드립니다.. ^^;;

http://batmask.co.kr/glan/glanpack.zip


제가 해본 패키지는 자료실에 올렸었는데 제대로 패키징 하시면 지우겠습니다. ^^
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

에구 저는 잘 안 됩니다. 컴파일은 되는데 중복 정의 링크 오류가 나네요...

패키지도 잘 안 되네요. 파일들이 Dev-Cpp 루트 디렉터리에 깔립니다. 디렉터리 설정에 뭔가 문제가 있는 듯 합니다.

좀 더 살펴볼게요... 패키지 형태로 만든다면 일단 헤더 파일 하나만 있으면 되는 glancore 가 더 적합할 것입니다. 그리고... 기본 글꼴들을 아예 목적 코드 형태로 라이브러리에 포함시키는 건 어떨까 하는 생각도 하고 있습니다.
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

아.. 제가 에러가 안나니 뭐가 문제인지 잘 알수가 없어서..

중복정의 에러메세지좀 보여주심 안될런지요? ^^;;;

패키징은 처음 해본건데.. 역시나 잘못했군요. ㅡㅡ;;

헤더파일은 꼬리에 꼬리를 물길래 다 넣어버렸던 건데 하나만으로도 가능한가 보네요.

glan 에 대한 내용을 더 살펴봐야 할듯... glancore형태란 것에 대해 잘 모르겠어서.. ^^;;
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

glancore는 사용자에게 헤더 하나만 노출시키고 나머지는 모두 숨기도록 한 버전입니다. viewtopic.php?p=1201#1201 에 논의가 있구요. 파일은 http://gpgstudy.cafe24.com/cafe24board/ ... 401&idx=72 에 있습니다. include에 있던 헤더들이 모두 src로 가고 include에는 glancore.h만 있습니다. 패키지 작성 시 include에는 glancore.h 만 포함시키면 됩니다....
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

참 오류 메시지들입니다...

Code: Select all

컴파일러: Default compiler
Building Makefile: "E:\Dev\Libs\glan-1.0.6mod\sample\Textdraw\Makefile.win"
Finding dependencies for file: E:\Dev\Libs\glan-1.0.6mod\sample\Textdraw\main.cpp
실행중  make...
make.exe -f "E:\Dev\Libs\glan-1.0.6mod\sample\Textdraw\Makefile.win" all
g++.exe -c main.cpp -o main.o -I"E:/Dev/Dev-Cpp/include/c++"  
-I"E:/Dev/Dev-Cpp/include/c++/mingw32"  -I"E:/Dev/Dev-Cpp/include/c++/backward"  
-I"E:/Dev/Dev-Cpp/include"  -I"E:/Dev/Libs/glan-1.0.6mod/include"  

g++.exe main.o  -o "Textdraw.exe" -L"E:/Dev/Dev-Cpp/lib" -L"E:/Dev/Libs/glan-1.0.6mod" 
-mwindows -lGLAN -lopengl32 

E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.rdata$_ZTV8glanText+0x0):gi_text.cpp: 
multiple definition of `vtable for glanText'
main.o(.data$_ZTV8glanText+0x0):main.cpp: first defined here
E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.rdata$_ZTI8glanText+0x0):gi_text.cpp: 
multiple definition of `typeinfo for glanText
...
이런 multiple definition 들이 좀 더 나온 후에 상당히 이상한 메시지들도 나옵니다...

Code: Select all

E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0x1c):gi_text.cpp: undefined 
reference to `__gxx_personality_sj0'
E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0x41):gi_text.cpp: undefined 
reference to `_Unwind_SjLj_Register'
E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0xd7):gi_text.cpp: undefined 
reference to `_Unwind_SjLj_Resume'
E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0x154):gi_text.cpp: undefined 
reference to `_Unwind_SjLj_Resume'
...
제 Dev-C++이 이상한 걸지도 모르겠습니다...
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

아 핵버전이 glancore형태였군요.. ^^

흠... 링커에러들을 보아도 사실 잘 모르겠습니다. ㅡㅡ;;

안되신다는 얘기 듣고 다른 곳에 DevCpp설치된 곳에 가서 해보기도 했는데

그곳에서도 무난히 되서.... 뭐라고 말씀드리기가 힘드네요.. ^^;;;

.....

그냥 참고 정보로 제 집의 컴터는 win2000 에 gcc 3.3.1 을 사용하고

DevCpp(4.9.8.7) 업데이트는 각종 랭귀지 팩을 제외하곤 다 업데이트 된 상태구요,

컴파일, 링커 옵션등은 모두 no 상태에서 빌드했습니다.

참고로 컴파일 로그는 다음과 같습니다.

Code: Select all

컴파일러: Default compiler
Building Makefile: "C:\4학년2학기수업\computer graphics\GLAN-1.0.16mod\sample\Textdraw\Makefile.win"
실행중  make clean
rm -f main.o  Textdraw.exe

g++.exe -c main.cpp -o main.o -I"C:/Dev-Cpp/include/c++"  -I"C:/Dev-Cpp/include/c++/mingw32"
  -I"C:/Dev-Cpp/include/c++/backward"  -I"C:/Dev-Cpp/include"  -I"C:/Dev-Cpp/include/GL"  

g++.exe main.o  -o "Textdraw.exe" -L"C:/Dev-Cpp/lib" -L"C:/Dev-Cpp/lib" -L"C:/4학년2학기수업/computer graphics/GLAN-1.0.16mod" -mwindows -lGLAN -lopengl32 

실행 종료
편집성공
다른 곳에서 했던 컴퓨터는 XP에 DevCpp(아마도 4.9.8.7)도 중요 업데이트는

다 되어 있는 상태고 gcc도 원래 포함된거 사용하는 것이었는데 무난히 되었습니다.

.....

뭐가 문제일까요.... ^^;;;
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

헛.. 다른거 컴파일하다가 위에서 말씀하신 에러와 비슷한게 떴습니다. ㅡㅡ;;

이유는 모르겠는데... 되던건데... 위에서 쓰셨던

Code: Select all

E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0x1c):gi_text.cpp: undefined 
reference to `__gxx_personality_sj0'
와 거의 유사한 에러였습니다. undefined reference 어쩌구 저쩌구..

전체 재컴파일을 하니 되는군요. ^^;;

혹시 안해보셨으면 한번 시도해 보시길...
batmask
Posts: 15
Joined: 2004-02-17 11:40
Contact:

Post by batmask »

구글 검색결과...

http://osprey.unisa.ac.za/phorum/read.p ... =958&t=958
http://www.allegro.cc/forums/view_thread.php?_id=331111
http://www.cs.vassar.edu/~priestdo/emac ... 00277.html
http://linux.derkeiler.com/Newsgroups/c ... /0514.html


내용을 정리하면 프로젝트 옵션에 라이브러리 패스를 추가해라,

gcc 대신 g++을 써라.. 아니면 -lstdc++ 옵션을 추가해라... 정도군요. :o

....

근데 이 포럼 게시판(?)은 리플 수정을 어찌하는건지.. 생각나는데로 손가는 데로 적다보니

계속 새글을 붙여서 쓸데없는 말도 그대로 남겨두네요.. :wink:
비회원

Post by 비회원 »

batmask wrote:헛.. 다른거 컴파일하다가 위에서 말씀하신 에러와 비슷한게 떴습니다. ㅡㅡ;;

이유는 모르겠는데... 되던건데... 위에서 쓰셨던

Code: Select all

E:/Dev/Libs/glan-1.0.6mod/libGLAN.a(gi_text.o)(.text+0x1c):gi_text.cpp: undefined 
reference to `__gxx_personality_sj0'
와 거의 유사한 에러였습니다. undefined reference 어쩌구 저쩌구..

전체 재컴파일을 하니 되는군요. ^^;;

혹시 안해보셨으면 한번 시도해 보시길...
Post Reply