SWIG 사용법 좀 알려주세요ㅠㅠ

310 views
Skip to first unread message

김건우

unread,
Oct 12, 2012, 9:11:17 AM10/12/12
to golang...@googlegroups.com
클래스는 없고 함수만 존재하는 C++ 파일을 SWIG를 통해 Go에서 사용하려고 하는데

SWIG 홈페이지의 예제는 돌아가지가 않네요ㅠㅠ

예제대로 하다보면 공유 라이브러리(Shared Library)를 로드할 수 없다고 하네요...

혹시 해결법을 아시는 분 있으신가요ㅜㅜ?

도와주세요!

최종적으로 제가 하려는 것은 SWIG를 통해 C++ 파일을 패키지로 사용하는거에요~

Jongmin Kim

unread,
Oct 12, 2012, 12:48:17 PM10/12/12
to golang...@googlegroups.com
건우님 잘 지내시죠? ^^
알려주신 SWIG 사이트에 있는 내용은 Go 1 나오기 전 문서인 것 같네요.
저 문서에서 6g, 6c, 6l, gopack 부분은 모두 go tool 안으로 들어갔기 때문에
각각 

$ go tool 6g example.go
$ go tool 6c example_gc.c
$ go tool pack example.a example.6 example_gc.6

$ go tool 6g main.go  # 위 패키지를 사용하는 Go
$ go tool 6l -r . main.6

이렇게 해주니 잘 됩니다. shared library 못 찾는 건,
LD_LIBRARY_PATH에 만들어진 example.so 경로를 줘도 되지만,
6l 의 -r 옵션으로 (gcc의 -L과 같은) so 파일 경로를 줘서 링킹하니까 되구요.

저 문서 방법대로 말고 좀 더 편한 방법이 있을 것 같긴 합니다.. 

2012년 10월 12일 금요일 오후 10시 11분 17초 UTC+9, 김건우 님의 말:

김건우

unread,
Oct 12, 2012, 10:39:14 PM10/12/12
to golang...@googlegroups.com
네 전 잘지내고 있어요~ 바쁘긴 하지만ㅠㅠ

종민님도 잘 지내시죠?ㅎㅎ

알려주신대로 하니깐 잘 동작하네요

그런데 SWIG를 통해서 얻은 .go 파일은 해당 폴더에서 go install 명령어를 실행하니깐

time.h가 없다고 뜨네요 (example.c 파일에서 time.h를 사용했습니다.)

ㅠㅠ 한 번 더 구원의 손길을...

2012년 10월 13일 오전 1:48, Jongmin Kim <atom...@gmail.com>님의 말:

--
--
* 이 그룹에 이메일로 게시하려면 다음 주소로 이메일을 보내시면 됩니다.
golang...@googlegroups.com
* 추가 옵션을 보려면 http://groups.google.com/group/golang-korea?hl=ko?hl=ko의 그룹을 방문하세요.
 
 



--
Kim, Gunwoo ________________________________________________________
Department of Computer Science and Engineering, Pusan National University
30 Jangjeon-dong, Geumjeong-gu, Busan 609-735, Korea
Mobile: +82-10-3725-0414
E-mail: gun...@pusan.ac.kr
___________________________________________________________

Jongmin Kim

unread,
Oct 12, 2012, 11:12:33 PM10/12/12
to golang...@googlegroups.com
go install 시, -gcflags, -ldflags 옵션을 줄 수 있습니다.

-gcflags
    arguments to pass on each 5g, 6g, or 8g compiler invocation
-ldflags
    arguments to pass on each 5l, 6l, or 8l linker invocation

이 두 옵션 중에 헤더 파일 지정으로 해결할 방법이 있을 것 같은데
한 번 살펴봐주시고 저희한테도 알려주세요~~ ^^; 지금 핵페어 벼락치기중이라.. 

근데, SWIG으로 뭐 하실려고 하는 건지 궁금해지네요.. ^^

2012년 10월 13일 토요일 오전 11시 39분 16초 UTC+9, 김건우 님의 말:

김건우

unread,
Oct 12, 2012, 11:26:18 PM10/12/12
to golang...@googlegroups.com

아하 감사합니다ㅎㅎ

전 핵페어 관련된 건 아니구요~

좀 진척이 생기면 알려드리겠습니다ㅎㅎ

바쁘신데 감사해요!

마무리 잘하세요!

2012. 10. 13. 오후 12:12에 "Jongmin Kim" <atom...@gmail.com>님이 작성:

김건우

unread,
Oct 17, 2012, 1:48:46 AM10/17/12
to golang...@googlegroups.com
SWIG를 통해 얻은 go 파일을 go install 명령을 통해서 패키지로 사용하는 방법은

Go 1.0.3 버전에는 없습니다!

하지만 해결책이 없는 것은 아닙니다~^^

go install 명령을 사용하기 위해서는 현재 개발중인 버전의 소스를 받아서 이용해야 합니다!

개발 버전은 hg clone https://code.google.com/p/go 명령을 통해서 얻을 수 있습니다.

그리고 물론 src 디렉토리에 가셔서 ./all.bash 하셔야 하구요.

여기서 GOROOT의 misc 디렉토리에 가시면 swig 디렉토리가 있습니다.

swig 디렉토리 안에 callback, stdio 디렉토리가 존재하는데

원하시는 예제 디렉토리를 자신의 GOPATH로 복사합니다.

그리고 해당 디렉토리에 가셔서 go install 하면 동작합니다.

각각의 디렉토리에 test 파일이 존재하는데 go test 명령을 실행했더니 역시 잘 동작합니다!

go-nuts에서 허접한 영어 실력으로 물어 봤는데 잘 가르쳐 주시더군요ㅠㅠ

참고로 swig 입력 파일인 .i 파일은 더 이상 사용하지 않는다고 하네요.

예제 디렉토리에도 보시면 있겠지만 .swig 혹은 .swigcxx 파일을 사용합니다!

이제는 swig 파일 작성하려면 어떻게 해야하는지 알아봐야겠네요ㅠㅠ

혹시 swig를 사용해야할 분이 계시다면 도움이 될까 해서 적어봅니다.

Jongmin Kim

unread,
Oct 17, 2012, 5:42:49 AM10/17/12
to golang...@googlegroups.com
정리 감사합니다~ ^^
사용하기가 조금 더 편해진 모양이네요. 

2012년 10월 17일 수요일 오후 2시 48분 46초 UTC+9, 김건우 님의 말:

김건우

unread,
Oct 17, 2012, 6:09:45 AM10/17/12
to golang...@googlegroups.com

네 더 사용하기 편리하도록 수정 중인 것 같습니다.
또 새로운 것 알아내면 올리겠습니다~^^

2012. 10. 17. 오후 6:42에 "Jongmin Kim" <atom...@gmail.com>님이 작성:

deneb

unread,
Oct 24, 2012, 12:29:09 AM10/24/12
to golang...@googlegroups.com
앗... swig는 좀 다루는데... 너무 늦게 봤네요.
뭐... python하고 c#  때문에 쓰고 있는거 빼면... go는 안해봐서 모르겠군요. ㅎㅎ
Reply all
Reply to author
Forward
0 new messages