1 단계 내 실행 파일의 가져 오기 LIB 파일 (main.lib) (주 있습니다. exe)는 일부 기호를 내 보냅니다. 이러한 기호는 extern "C"를 사용하여 내 보냅니다.라이브러리 파일 (.A)를 사용하여 GCC와 DLL을 빌드는 가져 오기 라이브러리로 변환 (lib 디렉토리)
2 단계는 또한 몇 가지 추가 기능을 수출 소스 파일 (extra.cpp)가 있습니다. 정적 연결 라이브러리 (extra.lib)를 생성하고 main.exe의 내보내기 사용자 인 추가 함수가 있으므로 main.lib을 포함시킵니다.
3 단계는 DLL이 ( bbb.dll) 메인 .exe에서 그 여분의 함수를 호출하는이 라이브러리 (extra.lib)와 연결 내장되어 있습니다. (bbb.dll로드와 처음에 메인 .exe에 의해 사용되는 점에 유의.)
가 이제와 Mingw (GCC)를 사용하여 2 단계와 3 단계를 반복하기 위해 노력하고있어 대신 MS의 Visual Studio (cl). Step 2x와 3x라고 부르 자. main.exe가 많은 파일을 가진 큰 프로젝트이기 때문에 ... libmain.a 소스가 좋은 옵션이 아니므로 here이라는 메시지가 표시됩니다. main.lib은 다음 명령을 사용하여 .a 파일로 변환 할 수 있습니다.
reimp -d main.lib
dlltool -k -d main.def -l libmain.a
# reimp creates the .def file.
# dlltool uses the .def to create the .a that is linked in to the app.
2 단계.
gcc -c -o extra.o -O1 -s -x c++ extra.cpp
ar rs libextra.a extra.o
ar rs libextra.a libmain.a
단계의 3 배.
g++ -O2 -o bbb.dll -shared -x c++ bbb.cpp -static-libgcc -static-libstdc++ -Wl,-s -Wl,--kill-at,--export-all-symbols,--enable-stdcall-fixup -Wl,--large-address-aware -lextra
나는 단계 3 배에서 링커 오류를 받고 있어요.
libmain.a(lextra.o):extra.cpp:(.text+0x38): undefined reference to `A_Function_In_main'
이름 차이 차이는 무엇입니까?
또는 gcc가이 방법을 사용하여 bbb.dll 을 구축하는 것도 가능하다?
내가 뭘 잘못 했니?
Windows 7에서 Visual Studio 2012를 사용하고 있습니다. MinGW with gcc 4.6.1.
'A_Function_In_main가'libmain.a에있는 경우 검사 :
nm libmain.a > libmain_dump.txt
libmain_dump에서 텍스트의 블록.txt에 관한 'A_Function_In_main'
dshms00350.o:
00000000 b .bss
00000000 d .data
00000000 i .idata$4
00000000 i .idata$5
00000000 i .idata$6
00000000 i .idata$7
00000000 t .text
00000000 T A_Function_In_main
00000000 I __imp_A_Function_In_main
U _head_libmain_a
에서
GCC 4.7.2
reimp 소스? – sny
확인을 위해 dumpbin/export bbb.dll (Visual Studio 도구 명령 프롬프트에서)이 dll의 진입 점을 나열합니다. DLL은 모든 컴파일러에서 작동해야하기 때문에 DLL 이름을 절대로 이름을 변경해서는 안됩니다 ("C"각 함수를 내 보내야한다고 말한 적이 있습니다). – MarkU
하지만 실제 문제는 링크 단계에서 실패한 MinGW를 사용하여 bbb.dll을 작성하는 것입니다. – MarkU