__stdcall을 사용하여 dll을 컴파일하는 GCC
-
01-07-2019 - |
문제
Visual Studio 2008 내에서 __stdcall을 사용하여 dll을 컴파일할 때 dll 내부의 컴파일된 함수 이름은 다음과 같습니다.
함수 이름
wx-dev-cpp를 사용하여 GCC를 사용하여 동일한 dll을 컴파일할 때 GCC는 함수에 있는 매개변수 수를 추가하므로 종속성 워커를 사용하는 함수의 이름은 다음과 같습니다.
FunctionName@numberOfParameters 또는 == FunctionName@8
dll의 내보낸 기호에서 @nn을 제거하도록 GCC 컴파일러에 어떻게 지시합니까?
해결책
__stdcall은 시작 부분에 밑줄을 추가하고 끝에 매개변수 바이트 수(@로 구분)를 추가하여 함수 이름을 장식합니다.
따라서 함수는 다음과 같습니다.
void __stdcall Foo(int a, int b);
..._Foo@8이 됩니다.
.DEF 파일의 EXPORTS 섹션에 함수 이름(데코레이션되지 않음)을 나열하면 데코레이션되지 않은 상태로 내보내집니다.
아마도 이것이 차이점일까요?
다른 팁
그냥 사용 -Wl,--kill-at
gcc 명령줄에서 다음을 통과합니다. --kill-at
링커에.
참고자료:
당신은 또한 사용할 수 있습니다 -Wl,--add-stdcall-alias
GCC의 링커 옵션에.이렇게 하면 두 함수 이름(장식된 이름과 장식되지 않은 이름)이 모두 존재하고 별칭으로 사용될 수 있습니다.
제휴하지 않습니다 StackOverflow