제목에 따라 C를 사용하여 DLL을 만들고 C++ 프로젝트에서 링크하려고합니다. 나는 인터넷에서 다른 튜토리얼을 읽고 따라 갔지만 매번 누락 된 것이 있으며 무엇을 이해하지 못한다.C에서 DLL을 만들고 C++ 프로젝트에서 연결
가 여기에 내가 단계적으로, 무슨 짓을했는지 :
난 후, testlib
라는 이름의 새로운 Win32에서 프로젝트를 생성 마법사에서, 나는 "DLL"과 "빈 프로젝트"를 선택했다.
추가 헤더 :
//testlib.h
#include <stdio.h>
__declspec(dllexport) void hello();
추가 된 소스; 나는 그것이 C 소스가되고 싶어요 때문에 나는 그렇게
//testlib.c
#include "testlib.h"
void hello() {
printf("DLL hello() called\n");
}
빌드가 succeded, 내가 simplly이 .c에서 .cpp 파일의 이름을 변경해야 읽어 보시기 바랍니다.
이제 다른 프로젝트에서 유용한 DLL을 사용하고 싶습니다.
다음 : 새 프로젝트 (testlibUse
). 이번에는 "Empty project"를 선택했습니다. 내가 속성 -에 testlib.dll
> VC++ 디렉토리 -> 실행 디렉토리에있는 폴더의 경로를 추가
:
헤더를 추가 할 필요가 없습니다, 단지 CPP 소스 그리고//main.cpp #include <testlib.h> int main() { hello(); }
을 생성
폴더에 경로를 추가했습니다 (등록 정보 -> VC++ 디렉토리 -> 디렉토리 포함)
testlib.h
,
나는
testlib.lib
속성 -에 (포함 확장)> 링커 -> 입력 -> 내가 만들려고 추가 종속성
LINK : C:\path\testlibUse\Debug\testlibUse.exe not found or not built by the last incremental link; performing full link
main.obj : error LNK2019: unresolved external symbol "void __cdecl hello(void)" ([email protected]@YAXXZ) referenced in function _main
C:\path\testlibUse\Debug\testlibUse.exe : fatal error LNK1120: 1 unresolved externals
을 testlib
으로 돌아 가면 의 이름을 testlib.cpp
으로 변경하고 dll을 다시 작성하면 testlibUse
을 빌드 할 수 있지만 런타임에 "dll을 찾을 수 없음"오류가 발생합니다.
"Release"(필요한 경우 경로 변경)에서 두 프로젝트의 구성을 변경하려고했지만 아무 것도 변경되지 않았습니다.
오랫동안 미안하지만 나는 내가 한 일을 정확히 적어 두는 것이 필요하다고 생각합니다.
제안 사항?
게다가 Qt 프로젝트에서 내 dll을 사용하려면 변경해야 할 구성 매개 변수가 있습니까?
빌드가 성공적이지만 런타임에 "dll not found"오류가 발생합니다 ... 등록 정보 -> VC++ 디렉토리 -> 실행 가능 디렉토리에서 dll에 경로를 추가하는 것으로 충분하지 않습니까? – Saphrosit
@Saphrosit : 아니요, 아는 한, 앱 실행에 영향을 미치지 않습니다. 해당 속성 페이지에 대한 설명을 읽으십시오. 프로젝트를 빌드하는 동안 바이너리 찾기에 영향을줍니다. 런타임에 DLL을 (예 : PATH 환경 변수를 통해) 찾을 수 있어야합니다. –