2014-11-07 6 views
4

현재 delphi binding for lz4 & xxHash을 업데이트/작성하고 있습니다.XX50 (xxHash 및 lz4)으로 해결할 수없는 링크 오류 E2065

컴파일러 오류가있는 프로젝트 상태 is available here. xxHash.pas

function XXH32 (const AInput: Pointer; ALength: Integer; ASeed: Cardinal): Cardinal; cdecl; external name '_XXH32'; 

xxHash.o에서 기능 XXH32를 결합하려고 노력

작동하지 라인, 그것은 오류 E2065 발생합니다.

[dcc32 Fehler] xxHash.pas(122): E2065 Ungenügende Forward- oder External-Deklaration: 'XXH32' 

다른 모든 기능은 문제없이 바인딩되어 작동합니다.

난 덤프 파일을 생성하여 xxHash.o 분석

는 함수 xxHash.o마다 다른 추천 존재

objdump를 명령 xxH32의

objdump -D xxhash.o > xxhash.o.txt 

덤프 부 :

xxhash.o:  file format pe-i386 
Disassembly of section .text: 
00000000 <_XXH32>: 
    0: 55      push %ebp 
    1: 57      push %edi 
    2: 56      push %esi 
    3: 53      push %ebx 
    4: 83 ec 14    sub $0x14,%esp 
    7: 8b 44 24 28    mov 0x28(%esp),%eax 
    b: 8b 4c 24 2c    mov 0x2c(%esp),%ecx 
... 

제안 사항이 있으십니까?

최소한의 구현 :

program lz4_minimal; 

{$APPTYPE CONSOLE} 

{$L xxhash.o} 

function XXH32 (const AInput: Pointer; ALength: Integer; ASeed: Cardinal): Cardinal; cdecl; external name '_XXH32'; 
function XXH64 (const AInput: Pointer; ALength: Integer; ASeed: UInt64): UInt64; cdecl; external name '_XXH64'; 

//necessary dependencies 
function _malloc(size: cardinal): Pointer; cdecl; 
begin 
    GetMem(Result, size); 
end; 

procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; 
begin 
    Move(source^, dest^, count); 
end; 

procedure _free(P: Pointer); cdecl; 
begin 
FreeMem(P); 
end; 

begin 
end. 

xxHash.o이는 MinGW 4.8.1을 사용하여 구축, Windows 용 32 비트입니다. lz4에 포함 된 개정 r36의 Yann Collet에 의한 원본 소스 코드. Makefile이 포함되어 있습니다.

은으로 ObjectFile가 GitHub의 here

+0

함수 이름을 바꾸면 도움이되지 않았습니다 – Hugie

+0

[E2065 불충분 한 전달 또는 외부 선언] (http://docwiki.embarcadero.com/RADStudio/en/E2065_Unsatisfied_forward_or_external_declaration_'%25s'_ (Delphi)). 왜 당신이 그것을 만나는 것처럼, 말하기 어렵습니다. 우리가 유용 할 수도있는 간단한 프로젝트를 재현하려고 시도 할 수 있다면. –

+0

여기에 객체 파일을 첨부하려면 어떻게해야합니까? – Hugie

답변

4

다윗 헤퍼 제안 해결책에서 찾을 수 있으며, 제 함수 xxHash.c에 더미 기능을 추가하는 것이다.

새로운 덤프 파일은 다음과 같습니다

xxhash.o:  file format pe-i386 
Disassembly of section .text: 
00000000 <_XXDUMMY>: 
    0: b8 2a 00 00 00   mov $0x2a,%eax 
    5: c3      ret  
    6: 8d 76 00    lea 0x0(%esi),%esi 
    9: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi 

00000010 <_XXH32>: 
    10: 55      push %ebp 
    11: 57      push %edi 
    12: 56      push %esi 
.... 

이 프로젝트는이 해킹으로 컴파일 오류가 사라 졌어요.

다른 오브젝트 파일을 분석하고 첫 번째로 참조 된 함수를 바인드하려고하면 E2065 오류가 발생합니다.

MinGW 및 gcc 컴파일 된 .o 파일을 Delphi와 함께 사용하면 일반적으로 문제가있는 것으로 보입니다.

+0

버그 보고서를 제출 하시겠습니까? –

+0

예, 월요일에 직장에 다시 왔을 때. 나는 이것을 xe7로 시도 할 것이다. 나는 어제 xe3 준비 만했다. – Hugie

+0

xe7에서 같은 오류가 발생합니다. 나는 벌써 노력했다. –