导出lib的所有符号

在编译的时候,经常会报LNK2001,这代表找不到符号,一般是缺少库导致的。在某些时候,我们可以通过msdn找到这个符号在哪个lib库里面,但有些时候msdn却并没有对这个函数(符号)的描述(例如unresolved external symbol __security_cookie),这时候我们该怎么办了。一种方法是到网上搜索,看有没有人遇到这个问题。但如果你经常遇到这种问题时(特别是在移植时),你就会产生一个疑问,网上的那些人是怎么找到这些符号所在的库?下面我就提供一种方法来导出所有lib的符号:

@echo off setlocal call "C:/Program Files/Microsoft Visual Studio 9.0/VC/vcvarsall.bat" x86 for %%I in (%~dp0) do set BAT_ROOT=%%~fI set findSymTempFile="%BAT_ROOT%findSymTemp.txt" if exist %findSymTempFile% goto :findSym for /F "tokens=1,2,3 delims=," %%i in (%BAT_ROOT%/LibPaths.list) do ( if "%%k" == "search" ( @echo =====find in %%i,path=%%j================ @echo *****find in %%i,path=%%j****************>>%findSymTempFile% cd /d "%%j" for /F "tokens=1 delims=" %%a in ('dir *.lib /A- /B /S') do ( @echo %%~fa dumpbin.exe "%%~fa" /SYMBOLS>>%findSymTempFile% ) @echo ****>>%findSymTempFile% @echo ****>>%findSymTempFile% ) ) :findSym for /F "tokens=1 delims=" %%m in ('findstr /I %1 %findSymTempFile%') do ( @echo found %%m ) endlocal goto :eof 

 

LibPaths.list放在bat的当前目录,格式如下(最后面的search代表对其子目录进行搜索,否则就跳过)

 

winsdk7,"E:/Program Files/Microsoft SDKs/Windows/v7.0/Lib/",search

wincesdk6,"E:/Program Files/Windows Mobile 6 SDK/PocketPC/Lib/Armv4i",skip

directsdk,"E:/Program Files/DirectX_SDK/Lib/",skip

jdk,"E:/java/jdk/jdk1.6.0/lib",skip

ntddk,"F:/NTDDK/",skip

vs2008,"C:/Program Files/Microsoft Visual Studio 9.0",skip

winsdk6,"C:/Program Files/Microsoft SDKs/Windows/v6.0A/Lib",skip

winsdk5,"C:/Program Files/Microsoft SDKs/Windows/v5.0/Lib",skip

 

 

最后执行命令:“<bat名字> 要找的符号名”就可以查找了。当然你也可以在生成的findSymTemp.txt里面用ue进行查找。

你可能感兴趣的:(c,Security,search,mobile,Path,X86)