c ++ .exe에서 dll을 컴파일하는 방법
-
03-07-2019 - |
문제
C ++ 프로그램을 만들고 있지만 사용자에게 .exe 파일 만 제공 할 수 있기를 원합니다. 그러나 DLL이있는 라이브러리 (컬)를 사용하고 있습니다. 이 dll을 .exe 파일로 컴파일 할 수 있습니까?
코드 :: 블록과 mingw를 사용합니다.
다른 팁
2002 년부터 DDJ에 당신이 원하는 것을 가질 수있는 기사가 있습니다.
기본적으로 MSVC의 '지연로드'기능을 사용하여 DLL에 링크하고 EXE의 임베디드 리소스로 DLL을 포장하는 것의 조합을 사용합니다. 그런 다음 DLL은 수출 중 하나에 대한 첫 번째 호출이 이루어질 때 런타임에 자동으로 추출됩니다.
나는이 기술을 사용하지 않았으므로 그것이 얼마나 잘 작동하는지에 대해 실제로 언급 할 수는 없지만 매끄러운 아이디어처럼 보입니다.
당신이 사용할 수있는 일 머지
나는 만났다 dll2lib 한 번 유틸리티. 흥미로운 작품이지만 비싸지 만. 이를 통해 거의 모든 DLL을 정적 라이브러리로 변환 할 수 있습니다.이 라이브러리로 나중에 응용 프로그램과 연결되어 솔리드 EXE를 생성 할 수 있습니다. IIRC, 무료 버전에는 생성 된 라이브러리에서 함수를 입력하면 특정 알림 (MessageBox)이 표시됩니다.
특수 패커 도구가 필요합니다 Xbundler.
실제로이 작업을 수행 해야하는 경우 메모리에서 DLL을로드 할 수있는이 멋진 라이브러리를 사용할 수 있습니다. 나는 그것을 자원에서 DLL을 읽고 나를 위해로드하는 데 사용했습니다.
일반적으로 아니요. DLL은로드 할 때 로더 잠금을 획득하고 해당 지점에서 DLLMAIN을 호출하는 등 사소한 특수 행동을 가지고 있습니다. 이론적 링커는 각 dllmain이 응용 프로그램 main ()에서 호출되도록 배열 할 수 있지만로드 된 잠금 장치에서는 발생하지 않습니다. 이 로더 잠금 장치는 OS를 제어합니다. 또한 DLL은 DLLMAIN을 통해 새로운 스레드를 알리고, 이는 가짜가 거의 불가능할 것입니다.