【C++】PEXOPRTS 不工作了

本文详细介绍了如何在Windows 7 64位系统迁移过程中,通过PEXPORTS替代工具解决DLL文件在不同编译环境下导出的问题。包括使用MinGW编译DLL,PEXPORTS导出DEF文件,以及使用VC++创建最终的LIB文件。同时,分享了一个简单的DOS批处理脚本作为替代方案,确保VC++程序能够无缝调用MingW编译的DLL。文章还展示了在Libarchive中使用此方法的实际案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迁移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。

下一步可以增加修改修饰名的功能


@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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值