2010-12-16 5 views
1

C++, Qt, Mingw32 및 Netbeans을 사용하여 직장에서 응용 프로그램을 개발 중입니다. 회사의 소프트웨어 그룹에서 개발 한 자체 API를 사용해야합니다. 링크 할 DLL에 대한 심볼 라이브러리 .lib 파일이 있지만 Mingw32와 함께이 라이브러리를 사용할 수 없으며 Microsoft Visual Studio와 잘 작동합니다.MINGW32와 함께 사용하기 위해 DLL에서 심볼 라이브러리 생성

기호를 내보내고 Mingw32와 작동하는 .a 기호 라이브러리를 만드는 방법이 있는지 아는 사람이 있습니까? Visual Studio로 이동해야합니다.

"pexports"프로그램을 사용하여 .def 파일과 dlltool을 만들려고했지만 작동하지 않았습니다. 아직 참조되지 않은 기호 오류가있는 경우 불만을 표시 한 기호를 .def에 추가했습니다. 기호가 없기 때문에 불평을 멈추고 컴파일했습니다. 그러나 프로그램이 충돌합니다. 나는 Visual Studio에서 같은 코드를 시도해 보았고 컴파일과 실행이 잘되었다.

답변

0

동적으로 DLL을로드하는 것으로 생각하십니까? LoadLibrary, GetProcAddress 등등. 아마도 모든 DLL의 진입 점을 캡슐화하고, 라이브러리를로드 및 언로드하고, #typedefs를 모두 수행하는 등의 클래스를 쉽게 작성할 수 있습니다. 예기치 않은 작업이지만 사내 라이브러리 인 경우에는 아마 aren 엔트리 포인트가 너무 많습니까?

가져 오기 라이브러리가 과대 평가되었습니다. : p

+0

의, C++ 수출과 마이크로 소프트의 컴파일러에 컴파일 된 DLL을 불가능 말할 것 또한 클래스의이 작품? 내가 생각하기에 많은 엔트리 포인트는 없다. – oddi

+0

@oddi 아니, 그렇지 않을 것이다. 기능 만. – karlphillip

+0

생각, 그래서 내일 reimp 유틸리티를 시도하고 .lib .a 올바르게 변환 할 수 있는지 확인하십시오. – oddi

0

도움이되는지 확실하지 않지만 this guide을 확인하고 싶을 수 있습니다.

0

다음은 mysql 라이브러리에서이 작업을 수행 한 방법입니다.

는 dllwrap 사용 수출의 목록을 만듭니다

dllwrap --export-all-symbols --output-def libmysql.def libmysql.dll --implib liblibmysql.a 

이는 .DEF 파일에 수출 목록을 만들지 만 이름 맹 글링이 올바르지 않습니다. .def 파일을 텍스트 편집기에서 편집하고 '@'기호를 제거하십시오. 기호 이름에는 일반적으로 기호 이름도 붙습니다.

이 (가) 넷빈즈 호환 라이브러리를 작성하려면 다음을 실행합니다 : 그것으로

dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libMySQLclient.a -k 

컴파일을 당신은 정의되지 않은 심볼을 얻을 것이다 나는 실험을 제외하고 올바른 이름을 확인하는 방법을 모르겠어요. 정의되지 않은 기호는 올바른 장식을 갖습니다. .def 파일을 다시 편집하고 기호 이름을 수정하십시오. 올바른 .a 라이브러리 파일을 얻으려면 dlltool을 다시 실행하십시오.

0

.a/.lib 대신 DLL을 직접 연결해 보셨습니까? MinGW는 보통 당신을 위해 그렇게 해 드리겠습니다.

+0

어떻게해야합니까? – oddi

+0

@oddi. netbeans 내부에서 구성하는 방법에 익숙하지 않지만 공유/정적 라이브러리를 연결하는 것과 같은 방법으로 .dll을 연결해야합니다. –

+0

오케이, 이해합니다. – oddi

0
난 포기

, 일부 사람들은이 때문에 엉망으로 이름

관련 문제