2013-06-08 2 views
0

동적 (.dll)에서 바인딩하려는 정적 (.a/.lib) 라이브러리가 있습니다. 정적 라이브러리가 libColors.a이고 동적이 SWC.dll이라고 가정 해 보겠습니다. 이제 libColors.a 프로젝트 속성을 정적 라이브러리를 만들도록 변경합니다. 빌드하고 - .dll을 찾지 못했습니다. 예상되는 .o 및 .a 파일 만 찾았습니다. 내 SWC.dll 프로젝트로 전환하고 동적 라이브러리를 만들기 위해 속성을 변경하고 .a 파일을 만들려면 확인란을 선택하십시오. libColors.a --build it -을 연결하면 .dll 파일이 만들어집니다. (또한 class__declspec(import/export) 사양을 넣었음을 참고하십시오.)Code :: Blocks에서 동적 라이브러리에 정적 라이브러리를 바인딩하는 방법

이제 SWC.dll을 실행 파일에서 사용하고 싶습니다. 그러나 실행 파일에 SWC.h 파일 만 포함하면 정의되지 않은 참조가 많습니다. SWC.h에 아무 기능도 호출하지 않았으므로 여기에 문제가있는 것으로 보입니다. 그래서, 내 .exe 빌드 옵션에 SWC.a 옵션을 추가하면 오류없이 빌드됩니다. 그러나 내가 그것을 실행할 때, 그것은 내가 Colors.dll을 필요로했다라고 말한다? 나는 무엇을 놓치나요?

답변

0

objdump와 같은 도구 (CFF Explorer 또는 Dependency Walker)를 사용하면 해당 PE-COFF 실행 파일의 가져 오기 테이블을 볼 수 있습니다.

아마도 Colors 프로젝트가 컴파일되는 방식은 실제로 정적 라이브러리가 아닙니다. SWC.dll과 테스트 실행 파일의 가져 오기 테이블을 모두 검사하여이를 확인할 수 있습니다. 입력란에 Colors.dll의 가져 오기 항목이 있으며 가져올 항목이 무엇인지 알 수 있습니다.

Color.h에 선언 된 데이터와 함수를 확인하고 어디서나 __declspec()으로 꾸며져 있지 않은지 확인하십시오. Color.h에있는 함수가 'SWC'에 __declspec(dllimport)과 같은 것으로 사전 처리되면이 문제가 발생할 수 있습니다.

+0

제 질문을 읽어 주셔서 감사합니다. 그러나 나는 이미 문제가 무엇인지 알아 낸다. .lib 파일의 오래된 버전에 연결합니다. 어쨌든, 도구의 이름은 무엇입니까? 필자는이 문제가 다시 발생하면 미래 프로젝트에 도움이 될 것이라고 생각합니다. 특정 프로그램에 모두 링크되어있는 모든 라이브러리를 확인합니까? – mr5

+0

@ mr5 도구 링크를 추가했습니다. 'objdump.exe'는 mingw btw와 함께 제공되는 명령 행 도구입니다. 위에서 언급 한 도구 중 하나를 사용하여 주어진 실행 파일이나 dll이 무엇에 의존하는지 확인할 수 있습니다. – greatwolf

관련 문제