64bit application에서 32bit 라이브러리 참조하기.
글쓴이: dongyuri / 작성시간: 일, 2007/04/15 - 3:28오후
안녕하세요, 현재 솔라리스에서 64bit 어플리케이션을 작성하고 있습니다.
컴파일러는 g++을 쓰고 있고요,
어플리케이션에서 링크하는 라이브러리 중에 32bit으로 컴파일을 한 것이 있습니다.
MD5 관련 라이브러리인데요, 이 라이브러리는 32bit으로 컴파일이 되어 있습니다.
즉 MYAPP 는 64bit이고
libMD5.a 32bit으로 컴파일 되었습니다.
MYAPP는 libMD5.a를 링크해야 합니다.
그런데 링크를 하려고 하면
ld: 경고: 파일 ./libMD5.a(md5.o): 잘못된 ELF 클래스: ELFCLASS32
와 같은 에러를 내고 수행이 되지 않습니다.
여기에 대한 해결책을 알려주시면 감사하겠습니다.
Forums:
libMD5 을 64bit으로
libMD5 을 64bit으로 빌드된것을 쓰는 수밖에 없을 것 같은데요..
./sparcv9 밑에 있을 수도..
너무 상식적인 댓글이라 죄송하네요..
답변 감사합니다만, 해결책이 아니라서요.
답변 감사합니다, 그렇지만 해결책이 아니라서요.
왜나하면 libMD5.a, 즉 MD5.cpp 파일이 64bit로 컴파일을 할수가 없습니다.
아마, 프로그램 내부의 로직 자체가 32bit로 컴파일 될 것으로 코드가 되어 있는 것 같습니다.
여기서 다른 질문이 하나 더 있는데요,
솔라리스 /usr/lib에 libmd5.so 가 있는데
이 파일은 "file"명령어로 보면 32bit(EFLCLASS32)로 되어 있습니다.
그런데 제 MYAPP에 링크가 됩니다.
물론, static과 dynamic으로 다르긴 하지만,
해결 방법이 있을 것이라 생각하였습니다.
그래서 MD5.cpp를 so 파일로 libMD5.so로 만들었습니다.
그렇지만, MYAPP에 링크가 되지 않습니다.
즉. 시스템에서 제공하는 32bit so(dynamic library)는 MYAPP에 링크가 되고,
제가 만든 32bit so는 MYAPP에 링크가 되지 않습니다.
이같은 현상을 볼때, 32bit library를 링크할 수 잇는 방법이 있을 것으로 추측이 됩니다.
장황하게 설명을 드려서,
질문을 요약하겠습니다.
1) 32bit static 라이브러리를 64bit application에 링크하는 방법은 무엇인가요?
(환경은 solaris 2.8, 컴파일러는 g++입니다.)
2) 위 방법이 불가하다면,
32bit dynamic 라이브러리를 64bit application에 링크하는 방법은 무엇인가요?
이런 경험을 하신 선배님들, 혹은 해결책을 아시는 후배님들의 답변을 기다립니다.
감사합니다.
시스템에서 제공되는
시스템에서 제공되는 32bit so가 64bit 어플리케이션과 링킹이 되었다는것이 이해가 가질 않는군요..
위에분이 말씀하신것처럼 보통 /usr/lib/sparcv9 밑에 있는 같은 이름의 so가 링킹되었을텐데..
ldd [program name] 하셔서 그 성공적으로 링킹되었다는 이플리케이션에서 실제로 링킹되어 있는 라이버러리를 다시 한번 확인해 보심이 좋을듯 싶습니다.
제가 알기로도 md5 라이버러리를 소스가 있으시다면 64비트로 컴파일 하셔서 링킹하시는 방법밖에 없을것입니다만.. (64비트 컴파일에서 에러가 난다면 적절히 수정하셔서 말이지요.)
댓글 달기