تبدیل dll به lib - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تبدیل dll به lib

0 امتیاز
سلام من dll دارم که با c++ ایجاد شده و من مجبور با loadLibrary کار کنم و یکی یکی توابع موجود در dll را بارگذاری کنم آیا امکانش وجود نداره بشه lib این dll را داشته باشم؟
سوال شده اسفند 3, 1397  بوسیله ی Alias (امتیاز 302)   3 23 31

1 پاسخ

0 امتیاز
 
بهترین پاسخ

سلام.در گام اول باید .def فایل ایجاد کنید که به راحتی می تونید با استفاده از برنامه dumpbin اینکارو انجام بدید dumpbin با اجرای vs command در اختیارتون هست.

به صورت زیر:

dumpbin /exports my_lib.dll > my_lib.def

اطلاعات مربوط به امضاء توابع در فایل my_lib.def ذخیره شده فقط بخش نام توابع را نگه دارید و مابقی را پاک کنید در نهایت یک خط با محتوی EXPORTS به ابتدای فایل اضافه کنید.

به طور مثال :

قبل از عمل :

    ordinal hint RVA      name

          1    0 028D4AB8 ?DEVICE_CPU@tensorflow@@3QEBDEB
          2    1 028D4AC0 ?DEVICE_GPU@tensorflow@@3QEBDEB
          3    2 028D4AC8 ?DEVICE_SYCL@tensorflow@@3QEBDEB
          4    3 028E1380 ?kDatasetGraphKey@GraphDatasetBase@tensorflow@@2QBDB
          5    4 028E1390 ?kDatasetGraphOutputNodeKey@GraphDatasetBase@tensorflow@@2QBDB
          6    5 03242488 ?tracing_engine_@Tracing@port@tensorflow@@0U?$atomic@PEAVEngine@Tracing@port@tensorflow@@@std@@A
          7    6 001996C0 TFE_ContextAddFunction
          8    7 00199710 TFE_ContextAddFunctionDef
          9    8 001997D0 TFE_ContextAsyncClearError
         10    9 001997E0 TFE_ContextAsyncWait
         11    A 00199830 TFE_ContextClearCaches
...

 

بعد از عمل :

EXPORTS
?DEVICE_CPU@tensorflow@@3QEBDEB
?DEVICE_GPU@tensorflow@@3QEBDEB
?DEVICE_SYCL@tensorflow@@3QEBDEB
?kDatasetGraphKey@GraphDatasetBase@tensorflow@@2QBDB
?kDatasetGraphOutputNodeKey@GraphDatasetBase@tensorflow@@2QBDB
?tracing_engine_@Tracing@port@tensorflow@@0U?$atomic@PEAVEngine@Tracing@port@tensorflow@@@std@@A
TFE_ContextAddFunction
TFE_ContextAddFunctionDef
TFE_ContextAsyncClearError
TFE_ContextAsyncWait
TFE_ContextClearCaches
...

در گام دوم با استفاده از برنامه lib که در همن vs command قرار داره با استفاده از فایل .def فایل .lib را برای ما ایجاد می کنه به صورت زیر:

lib /def:my_lib.def /OUT:my_lib.lib /MACHINE:X64

برای کتابخانه های 32 بیتی هم می تونید از فلگ /MACHINE:X86 استفاده کنید.

پاسخ داده شده اسفند 3, 1397 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد اسفند 19, 1397 بوسیله ی Alias
...