import std.stdio;
import sdl;
void main()
{
SDL_Init(SDL_INIT_EVERYTHING);
}
Şimdi şu basit SDL programını derlemeye çalışıyorum.
'dmd -c test.d sdl.d'
Buraya kadar her şey normal. Şimdi bağlamaya çalışıyorum.
'link test.obj sdl.obj VC\SDL.lib VC\SDLmain.lib'
Bu hatayı veriyor.
Alıntı:
> OPTLINK (R) for Win32 Release 8.00.8
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
VC\SDL.lib Offset 00000H Record Type 0021
Error 138: Module or Dictionary corrupt
Hata mesajından gene problemin object ya da kütüphane dosyalarının formatından kaynaklandığını düşünüyorum.
http://www.digitalmars.com/ctg/coff2omf.html
'coff2omf' diye bir araç derleyici ile gelmiyor şimdi para verip gidip Digital Mars'ın C++ derleyicisini de mi satın almam gerekiyor. Microsoft derleyici araçlarını bedava dağıtırken sırf ben Digital Mars'a olan hayranlığımdan gidip onların C++ derleyici ve bağlayıcı araçlarını mı satın alayım :(
Ya da SDL'i kaynak kodundan Digital Mars C++ derleyicisiyle derlemek belki çözüm olabilir diye düşünüyorum.
Daha sonra gene daha önce konuştuğumuz objconv programını kullanarak lib dosyalarının formatını OMF formatına çevirmeyi düşünüyorum. Burada çevirmeye çalıştığım VC6 ile oluşturulmuş kütüphane dosyalarıydı.
'objconv.exe -fomf -nu SDLmain.lib SDLmain2.lib'
Alıntı:
> Input library: SDLmain.lib, Format: COFF, Output: SDLmain2.lib, Format: OMF
6 Debug sections removed
1 Exception sections removed
Bunu başarılı bir şekilde tamamladı.
'objconv.exe -fomf -nu SDL.lib SDL2.lib'
Alıntı:
> Error 2507: SDL.lib is an import library. Can not convert to static library
Anladığım kadarıyla burada işlevlerin tanımları var:
'objconv.exe -d SDL.lib'
http://paste.pocoo.org/show/392112/
'link test.obj sdl.obj VC\SDLmain2.lib'
Dediğimde de bu hatayı veriyor.
Alıntı:
> OPTLINK (R) for Win32 Release 8.00.8
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_main
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_SetModuleHandle
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_GetError
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_Init
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_strlcpy
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined _SDL_Quit
VC\SDLmain2.lib(SDL_win32_m)
Error 42: Symbol Undefined ___mb_cur_max
Hatta yeşillik olsun diye assembly koduna bile çevirdim.
'objconv.exe -fyasm SDL.dll SDL.asm'
Şöyle bir şeyler oluştu :)
; Filling space: 0AH
; Filler type: lea with same source and destination
; db 8DH, 76H, 00H, 8DH, 0BCH, 27H, 00H, 00H
; db 00H, 00H
ALIGN 16
SDL_Init:
push ebp ; 681012C0 _ 55
mov ebp, esp ; 681012C1 _ 89. E5
push ebx ; 681012C3 _ 53
sub esp, 4 ; 681012C4 _ 83. EC, 04
mov ebx, dword [ebp+8H] ; 681012C7 _ 8B. 5D, 08
call SDL_ClearError ; 681012CA _ E8, 00000441
mov dword [esp], ebx ; 681012CF _ 89. 1C 24
call SDL_InitSubSystem ; 681012D2 _ E8, FFFFFE79
test eax, eax ; 681012D7 _ 85. C0
mov edx, 4294967295 ; 681012D9 _ BA, FFFFFFFF
js ?_0029 ; 681012DE _ 78, 0A
and ebx, 100000H ; 681012E0 _ 81. E3, 00100000
jz ?_0030 ; 681012E6 _ 74, 08
?_0028: xor edx, edx ; 681012E8 _ 31. D2
?_0029: pop ecx ; 681012EA _ 59
mov eax, edx ; 681012EB _ 89. D0
pop ebx ; 681012ED _ 5B
pop ebp ; 681012EE _ 5D
ret ; 681012EF _ C3
?_0030: call ?_0080 ; 681012F0 _ E8, 000004CB
jmp ?_0028 ; 681012F5 _ EB, F1
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]