迁移Posix下的一些工具常常需要用到MingW和VC++一起工作,这时候PEXPORTS就帮上大忙了:我们可以先用MinGW编译出dll,然后用PEXPORTS导出def文件,最后用VC++的LIB命令创建新的lib文件,VC++程序就可以无缝地调用MingW的dll。
迁移到win7 64bit之后,原来的PEXPORTS 0.4.3总是会莫名其秒Crash掉,打上补丁也没效果,将它编译成64bit也照样出错,求人不如求自己,写了一个简单的dos batch,就来代替原来的PEXOPRTS。
下一步可以增加修改修饰名的功能
这下就简单多了,使用的时候可以只要def文件 :
[code]
pexport xxx.dll
[/code]
也可以直接创建最后的import library
[code]
pexport xxx.dll x64
[/code]
图中用VC++编译libarchive里,就调用了mingw64编译的xz模块。
[img]http://dl.iteye.com/upload/attachment/294280/1c52986d-d087-3d36-ac7f-2cb2c72fc519.png[/img]
迁移到win7 64bit之后,原来的PEXPORTS 0.4.3总是会莫名其秒Crash掉,打上补丁也没效果,将它编译成64bit也照样出错,求人不如求自己,写了一个简单的dos batch,就来代替原来的PEXOPRTS。
下一步可以增加修改修饰名的功能
@echo off
if "%1"=="" goto :USAGE
:CHECK
where dumpbin.exe >nul
if %ERRORLEVEL% EQU 1 goto :FAILURE_1
dumpbin.exe /EXPORTS %1 > tmp 2>nul
echo LIBRARY %~n1 >%~n1.def
echo. >>%~n1.def
echo EXPORTS >> %~n1.def
SET no=1
SETLOCAL ENABLEDELAYEDEXPANSION
for /F "skip=19 tokens=3*" %%i in (tmp) do (
echo %%j @!no! >>%~n1.def
SET /A no=!no!+1
)
endlocal
if "%2"=="" goto :END
where lib.exe >nul
if %ERRORLEVEL% EQU 1 goto :FAILURE_2
lib /def:%~n1.def /machine:%2
goto :END
:USAGE
echo pexport <dll file> [x86|x64]
echo create import library from Dll --- Ray Linn
goto :END
:FAILURE_1
echo Can not find the dumpbin.exe in your path.
goto :END
:FAILURE_2
echo Can not find the lib.exe in your path.
goto :END
:END
del tmp
这下就简单多了,使用的时候可以只要def文件 :
[code]
pexport xxx.dll
[/code]
也可以直接创建最后的import library
[code]
pexport xxx.dll x64
[/code]
图中用VC++编译libarchive里,就调用了mingw64编译的xz模块。
[img]http://dl.iteye.com/upload/attachment/294280/1c52986d-d087-3d36-ac7f-2cb2c72fc519.png[/img]