2015-01-18 2 views
0

Windows 7에서 mingw64 4.9.2와 충돌하는 DLL 링키지를 조사한 결과, 링커에 공급 된 .def 파일을 조사한 결과, 1419 개 내보내기 중 처음 391 개가 모두 .refptr.FooBar이라는 이름을 가지고 있음을 확인했습니다. 동일한 빌드가 mingw64 4.6.3을 사용하여 성공적으로 연결되었으며,이 경우 .def 파일에는 이러한 내보내기가 포함되어 있지 않습니다.".refptr"은 무엇입니까? mingw64 .def 파일에서 무슨 뜻입니까?

.refptr. 접두사의 의미는 누구에게 말해 줄 수 있습니까? 인터넷 검색은 아무 소용이 없었다.

+1

https://gcc.gnu.org/ml/gcc-patches/2013-03/msg00858.html –

+0

@HansPassant 감사합니다. –

+0

@HansPassant ... 또한 문제에 대한 해결책을 제시합니다. –

답변

1

한스 옆모습의 GCC 패치 링크의 관련 부분 :

이 기능은 가 64 윈도우의 전체 48 비트 사용 가능한 주소 공간을 사용 다가오는 새로운 Cygwin에서 x64의 목표, 필요

. cygwin-target은 명령어 재배치시 을 작동시키는 의사 재배치 기능에 의존합니다. 이는 명령어가 일반적으로 32 비트 pc 상대 상대 위치에 서명 되었기 때문에 x86_64에서 문제가 될 수 있습니다. 그래서 거리가 가상 재배치를 위해 너무 넓어 질 수 있습니다. 우리가 pe-coff 타겟 점프 스텁에서 생성하는 함수 때문에 변수가 reference-pointer-variables를 통해 액세스되는지 확인해야합니다. 그래서 우리는 중간 모델 refptr-variables에 추가합니다.

나는 나의 링커 충돌이 단순히 .def 파일에서 모든 .refptr. 접두사를 삭제하여 부수적 인 피해 없이 해결 될 수 있다는 것을 발견했다. (분명히 항상 운이 좋은 것은 아닙니다)