현재 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
함수 이름을 바꾸면 도움이되지 않았습니다 – Hugie
[E2065 불충분 한 전달 또는 외부 선언] (http://docwiki.embarcadero.com/RADStudio/en/E2065_Unsatisfied_forward_or_external_declaration_'%25s'_ (Delphi)). 왜 당신이 그것을 만나는 것처럼, 말하기 어렵습니다. 우리가 유용 할 수도있는 간단한 프로젝트를 재현하려고 시도 할 수 있다면. –
여기에 객체 파일을 첨부하려면 어떻게해야합니까? – Hugie