문제

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의 링커 옵션에.이렇게 하면 두 함수 이름(장식된 이름과 장식되지 않은 이름)이 모두 존재하고 별칭으로 사용될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top