Calm Hill My Random Thoughts

DLL to Lib

Windows ပေါ်မှာ Build လုပ်ရတာ တကယ်တော့ လွယ်လှတယ်မဟုတ်ဘူး Error အများဆုံးပေးပါတယ်။ Source Code တစ်ချို့ကလည်း Windows ပေါ်မှာ Build လုပ်ဖို့အတွက် Makefile ဒါမှမဟုတ် Visual Studion Project သတ်သတ်ပေးထားပေမယ့် မပါလာရင်တော့ တကယ်ပဲရွာလည်ပါပြီ GNU Autotools တွေကကောင်းပေမယ့် VC အတွက်ကတော့ အဆင်မပြေပါဘူး configure လုပ်လို့မရပါဘူး အဲဒီတော့တကယ်လို့ VC နဲ့ဘယ်လိုမှ Build လုပ်လို့မရရင်တော့ MinGW နဲ့ Build လုပ်ယူရင်ရတတ်ပါတယ် MinGW ကလည်း 64bits အတွက်က အမြဲတမ်းတော့ အဆင်မပြေတတ်ပါဘူး အဲဒီတော့ Windows ပေါ်မှာက VC ဘယ်မှမရမှသာ MinGW နဲ့လုပ်တာ ကောင်းပါတယ်။ MinGW နဲ့ကထွက်လာရင် exe or dll ထွက်လာတယ် အဲဒီ့မှာ dll တွေကအလုပ်လုပ်ပေမယ့် အဲဒီ့ dll တွေကို အခြားသော VC နဲ့ Build လုပ်မယ့်နေရာမှာ ယူသုံးချင်ရတော့ မရပြန်ပါဘူး သူ့အတွက်က lib လိုပါတယ်။ ဒါကလည်း dll ကို lib ပြန်ထုတ်လို့ရပါတယ် နည်းနည်းတော့ ကြံရဖန်ရတယ်။ Visual Studio မှာပါတဲ့ lib ဆိုတဲ့ Command နဲ့ lib ထုတ်ယူလို့ရပါတယ် ဒါပေမယ့် dll ထဲမှာပါတဲ့ defination စာရင်းကိုထည့်ပေးဖို့လိုအပ်ပါတယ် ဒါလည်းပြန်ထုတ်ယူလို့ရပါတယ်။ စမ်းကြည့်တဲ့အနေနဲ့ libjpeg ကို MinGW64 နဲ့ Build လုပ်ထားတယ်။ အရင်ဆုံးအနေနဲ့ dll ထဲကနေ defination စာရင်းကို အရင်ထုတ်ရမယ်။ dumpbin command နဲ့အလွယ်တကူ ထုတ်လို့ရပါတယ် ထွက်လာတဲ့ Results တွေကိုမလိုတာတွေ ဖျက်ရမှာပေါ့။ အလွယ်ဆုံးကတော့ အောက်မှာပြထားသလို Command Prompt ကို Quick Edit On ထားပြီး Select လုပ်ကူးလိုက်တာ အဆင်ပြေပါတယ်။

Dumpbin

Name တွေကိုပဲကူးရပါမယ် တစ်ခြားဟာမပါရပါဘူး။ Text file အသစ်တခုယူ ပထမဆုံးတစ်ကြောင်းမှာ EXPORTS လို့ရေး အောက်ကနေ စောစောကကူးထားတဲ့ Name တွေကိုကူးထည့် ပြီးရင်တော့ extension ကို def နဲ့သိမ်းပါ။ def ရရင်တော့ lib ထုတ်လို့ရပါပြီ။

lib /def:libjpeg-8.def /out:libjpeg-8.lib /machine:x64

lib command ကိုသုံးပြီးထုတ်ရင် lib file ရလာပါလိမ်မယ် အဲဒီ့ဖိုင်ကိုရရင်တော့ VC နဲ့ Build ရင်လည်း အဲဒီ့ Library တွေကို ကိုယ့်ရဲ့ Project ထဲကနေ Reference လုပ်ပြီးတော့ ယူသုံးလို့ရနေပါပြီ။

Reference:

http://wiki.videolan.org/GenerateLibFromDll