[질문]DLL제작 및 사용하기

글쓴이: 익명 사용자 / 작성시간: 화, 2001/09/25 - 11:37오전
Program-Library HOWTO 를 보고 제작을 해봤는데
C형태로 만들어진 공유라이브러리를 동적적재하는
것은 잘 되지만 C++로 제작된 공유라이브러리는 안되더군요.
nm으로 심볼값을 체크해보니 역시나... C++특성상 (다형성)
실제 라이브러리상의 함수심볼이 소스코드와 달라서
함수를 제대로 불러올 수가 없습니다.
(예를 들면, hello란 함수심볼이, hello__Fv 이런형태로
변경되어 있더군요. 당연한거지만... -_-;;; )
물론 수작업으로 nm으로 체크한 심볼값으로 적재시키면
되기는 하지만 이건 그냥 테스트삼아 한거구 ...
어떻게 C++로 제작된 공유라이브러리의 함수를 동적적재
할 방법이 없을까요?
(라이브러리 컴파일&링크상에서 어케 하면 될듯도 한데... 쩝)
답변주시는 분들께 미리 감사드립니다.
doogle
Forums:
Re: [질문]DLL제작 및 사용하기
헐~ 하다보니 되는군요. ^^;;;
예전에 yacc (or bison) 사용할 때도 비슷한 문제에 직면했었는데...
C++에서 C형식으로 컴파일되도록(즉 다형성작없이 안일어나도록)
소스코드에,
extern "C"
를 함수 앞에다 붙어주면 나중에 라이브러리 심볼값이 변하지 않습니다.
혹은 그룹단위로 적용시킬려면
extern "C" {
..... (필요한 함수코드들) ...
}
이런식으로 하면 됩니다.
또다른 문제는 실제 라이브러리 만든후 본 프로그램 실행시 링킹에러가 난다는 것
이건 링크시 c++라이브러리를 추가해 줘야 합니다.
ex) gcc -shared -Wl,-soname=libNAME.so.0 -o libNAME.so.0.0 libNAME.o -lstdc++
Program-Library HOWTO 에선 C형식 공유라이브러리 제작시에도 -lc 를 붙이라고
되있는데 빼도 이정도는 알아서 붙어주던데 c++는 안되나 보더군요. -_-;;;
마지막으로 또 질문>
고수님들 위에 제가 한 방식이 제대로 된 걸까요?
( 그나저나 제가 묻고 제가 답하고... ^^ 지금 하는 행동을 보니 예전에 어느 잡지에서 읽은 게 생각
나는 군요. MIT던가 소프트웨어 센터에 하도 많은 학생들이 프로그램 짜다가 궁금한 점들을
물어보려고 끊임없이 찾아와서 이를 막기 위해 센터 앞에다 큰 곰인형을 갖다놓고 일단 이녀셕에게
물어보고 스스로 대답해 해결하도록 유도했다더군요. 그 후론 직접 센터에 들어오는 학생이 꽤나
줄었다는.... 믿거나 말거나... ^^;;; )
댓글 달기