클래스 파일을 공유라이브러리로 만들면 안될까요?
글쓴이: dltkddyd / 작성시간: 토, 2013/11/02 - 9:57오후
클래스의 헤더와 본문의 파일들을 공유라이브러리로 만들었습니다. class.h와 class.cc 파일로요. 그리고 이 파일들을 다음과 같이 공유라이브러리로 만들었습니다.
gcc -fPIC -c class.cc
그리고 이 파일로 공유라이브러리를 만들었습니다.
gcc -shared -WI,-soname,libtotal.so.1 -o libtotal.so.1 class.o
그리고 libtotal.so.1 파일을 /lib 폴더에 복사하고 /lib 폴더로 들어가서 다음과 같이 심볼릭 링크를 걸었습니다.
ln -s libtotal.so.1 libtotal.so
그리고 원래의 작업폴더로 들어와서
-main.cc- #include "class.h" int main() { //statement return 0; }
라는 식으로 공유라이브러리 헤더를 넣었습니다. 그리고 다음과 같이 최종적으로 빌드를 하면,
gcc -o main main.cc -ltotal
무수히 많은 undefined reference to~~ 라는 링크에러를 출력합니다. 위에 예로 든 것은 하나의 예로서 만든 것이고요 실제 만든 코드는 만 여줄 이상이라서 올릴 수 가 없습니다. 더 간단한 예를 봤을 때, 클래스 자체는 공유라이브러리로 만들 수 없는 건지요? 만들 수 있는 것이라면 공유라이브러리 제작 과정 중에서 무엇이 잘못 됐는지 궁금합니다. 코드 짜는 시간보다 컴파일 다루는 것이 더 쉬웠으면 하는 바램으로 아둔한 자가 어리석은 질문 몇 자 올림....
Forums:
비슷하게 따라 해보니 잘 됩니다. 클래스를
비슷하게 따라 해보니 잘 됩니다.
클래스를 공유라이브러리로 만들어도 됩니다.
그런데, 혹시라도 foo.cc가 아래와 같은 형태로
그런데, 혹시라도 foo.cc가 아래와 같은 형태로 작성되면
공유라이브러리 만드는데까지는 별 오류가 안 생기지만
main을 빌드할 때는 링크오류가 생깁니다.
혹시 이 경우가 아니더라도,
이렇게 짧은 테스트케이스를 만들어 문제가 재현되게 해 보시기 바랍니다.
거기서 출발하시면 질문도 구체적으로 올릴 수 있고 추적도 쉬워질 것입니다.
실험을 해보니, 또 한 가지 가능성이 있군요.빌드할
실험을 해보니, 또 한 가지 가능성이 있군요.
빌드할 때 g++ 대신 gcc를 이용해보니, 역시 공유라이브러리까지는 만들어지는데
main을 링크할 때 undefined reference 오류가 쏟아지네요.
c++ 코드는 g++로 빌드해야 합니다.
저는 c++ 코드를 gcc로 빌드하면 공유라이브러리 만들때부터 오류가 생길 것이라고 여겼고
아마 질문글 올리실때 실수로 gcc라고 쓰신걸로 생각했는데,
혹시 이 문제일지도 모르겠습니다.
댓글 달기