标签 Visual C++ 下的文章

在Windows平台VC2010编译64位OpenSSL 1.0.1j动态库

下载最新的OpenSSL源代码。目前的最新版本是1.0.1j 。下载地址:https://www.openssl.org/source/openssl-1.0.1j.tar.gz。下载到本地并解压到 D:\dev\openssl-1.0.1j。解压后可以看到如下的文件:

INSTALL.DJGPP | DOS系统
INSTALL.MacOS | 苹果Mac OS X
INSTALL.NW | Novell NetWare
INSTALL.OS2 | IBM OS2
INSTALL.VMS | VMS
INSTALL.W32 | Windows 32位
INSTALL.W64 | Windows 64位
INSTALL.WCE | Windows CE

因为OpenSSL是支持多平台的开源SSL库。以上文件就是各种操作系统的具体安装编译方法文档。

打开 “Visual Studio x64 兼容工具命令提示(2010)”会自动打开一个带VC编译环境的命令行。进入D:\dev\openssl-1.0.1j 目录运行

D:\dev\openssl-1.0.1j>perl Configure VC-WIN64A
D:\dev\openssl-1.0.1j>ms\do_win64a.bat
D:\dev\openssl-1.0.1j>nmake -f ms\ntdll.mak
D:\dev\openssl-1.0.1j>cd out32dll
D:\dev\openssl-1.0.1j>..\ms\test.bat

如果你没有perl的运行环境,请到http://www.activestate.com/activeperl/downloads去下载。

do_win64a.bat这个批处理使用perl来生成我们后续编辑链接所需要的mak和def文件。最后用nmake来编译链接。等待大概5分钟编译了848个c文件之后。生成的文件放在out32dll目录。最后的test.bat可以运行所有的测试。

如果需要编译Intel Itanium 64bit构架(一般在Windows Server上使用的CPU构架)命令变为以下,但是这个一般都用得很少

D:\dev\openssl-1.0.1j>perl Configure VC-WIN64I
D:\dev\openssl-1.0.1j>ms\do_win64i.bat
D:\dev\openssl-1.0.1j>nmake -f ms\ntdll.mak
D:\dev\openssl-1.0.1j>cd out32dll
D:\dev\openssl-1.0.1j>..\ms\test.bat

如果需要编译常见的Win32(x86),命令如下

D:\dev\openssl-1.0.1j>perl Configure VC-WIN32
D:\dev\openssl-1.0.1j>ms\do_ms.bat
D:\dev\openssl-1.0.1j>nmake -f ms\ntdll.mak
D:\dev\openssl-1.0.1j>cd out32dll
D:\dev\openssl-1.0.1j>..\ms\test.bat

让最新VC助手Visual Assist X 10.8.2001.0支持Visual C++ 6.0|Pre-2010 versions灰掉不能勾选解决办法

Visual Assist X 10.8.2001.0支持Visual C++ 6.0

win7x64中文版系统安装VC6.0之后安装Visual Studio 2010,然后安装Visual Assist X,安装界面打开后发现“Pre-2010 Versions of Microsoft Visual Studio”这个选项是灰掉的(排除是权限的问题)。用ProcMon监视VAX安装,发现读取了这个注册表键值:HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionApp Pathsmsdev.exe,这个App Paths是windows调用ShellExecute的exe搜索路径。估计VAX就是通过这个注册表判断VC6.0是否安装。默认键值写上msdev.exe的路径即可:C:Program Files (x86)Microsoft Visual StudioCommonMSDev98Binmsdev.exe

直接导入以下注册表也是可以的:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionApp Pathsmsdev.exe]
@="C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin\msdev.exe"

然后重新安装VAX,发现“Pre-2010 Versions of Microsoft Visual Studio”已经可以勾选。也就是最新的VAX可以被VC6所使用。

Visual C++ 2012 Redistributable在Windows XP上安装失败

Visual C++ 2012 Redistributable在Windows XP上安装失败

安装日志:

Burn v3.6.3014.0, Windows v5.1 (Build 2600: Service Pack 3), path: C:\Documents and Settings\xp\桌面\vcredist_x86.exe, cmdline: ''
Setting string variable 'WixBundleLog' to value 'C:\DOCUME~1\xp\LOCALS~1\Temp\dd_vcredist_x86_20131010151346.log'
Setting string variable 'WixBundleOriginalSource' to value 'C:\Documents and Settings\xp\桌面\vcredist_x86.exe'
Setting string variable 'WixBundleName' to value 'Microsoft Visual C++ 2012 Redistributable (x86) - 11.0.50727'
Detect 2 packages
Detected package: vcRuntimeMinimum_x86, state: Absent, cached: None
Detected package: vcRuntimeAdditional_x86, state: Absent, cached: None
Condition 'VersionNT >= v6.1 OR (VersionNT = v6.0 AND ServicePackLevel >= 2)' evaluates to false.
Error 0x81f40001: Bundle condition evaluated to false: VersionNT >= v6.1 OR (VersionNT = v6.0 AND ServicePackLevel >= 2)
Detect complete, result: 0x0

由日志看出VS2012对系统环境的要求是:VersionNT >= v6.1 OR (VersionNT = v6.0 AND ServicePackLevel >= 2) 也就是Vista SP2极其以上的系统。所以XP不满足要求。

在Visual Studio 2012中有可以将Platform ToolSet由默认的Visual Studio 2012(v110)修改为Visual Studio 2010(v100)可以回避此问题。但是很不幸的是我的项目需要用到DismAPI,而DismAPI头文件里面的SAL批注是Microsoft SDK v8.0,也就意味着必须用v110 Platform ToolSet。