使用VS2015编译xlslib库

环境:

  win7_x64,VS2015

开始:

一、下载xlslib库

  xlslib-package-2.5.0.zip

  解压到一个指定目录,如E:libraryxlslib-package-2.5.0

二、创建VS2015项目

  1. 将"E:libraryxlslib-package-2.5.0xlslibxlslibuildmsvc2012"文件夹复制一份,并重命名为msvc2015

  2. 使用VS2015打开"E:libraryxlslib-package-2.5.0xlslibxlslibuildmsvc2015xlslib.sln",打开期间会提示是否升级到VS2015编译器,点击升级。

三、配置VS2015项目

  1. 修改"xlslib_dll"项目

  "xlslib_dll"项目 -> "编辑 xlslib_dll.vcxproj",将重复的"<ClCompile Include="....srcxlslibformula.cpp" />"项,删除一个,然后重新加载项目即可。

  "xlslib_dll"项目 -> "C/C++" -> "预处理器" -> "预处理器定义" 添加 "_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS"

  "xlslib_lib"项目 -> "属性"  -> "生成事件" -> "后期生成事件" -> "命令行" 替换为 

echo $(SolutionDir)bin/x64_MSVC2015.$(Configuration)createDLL -M$(Platform) -n$(OutDir)$(ProjectName).map -l$(IntDir) -i$(OutDir)$(ProjectName).lib -W$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2015.$(Configuration)
$(SolutionDir)bin/x64_MSVC2015.$(Configuration)createDLL -M$(Platform) -n$(OutDir)$(ProjectName).map -l$(IntDir) -i$(OutDir)$(ProjectName).lib -W$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2015.$(Configuration)

  "xlslib_lib"项目 -> "属性"  -> "常规" -> "输出目录" -> 替换为 "$(SolutionDir)bin/$(Platform)_MSVC2015.$(Configuration)"

  "xlslib_lib"项目 -> "属性"  -> "常规" -> "中间目录" -> 替换为 "$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2015.$(Configuration)"

  2. 修改"createDLL"项目

  "createDLL"项目 -> "C/C++" -> "预处理器" -> "预处理器定义" 添加 "_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS"

  "createDLL"项目 -> "属性"  -> "常规" -> "输出目录" -> 替换为 "$(SolutionDir)bin/$(Platform)_MSVC2015.$(Configuration)"

  "createDLL"项目 -> "属性"  -> "常规" -> "中间目录" -> 替换为 "$(SolutionDir)obj/$(ProjectName)_$(Platform)_MSVC2015.$(Configuration)"

四、修改编译错误

  1. 修改"acconfig.win32.h"文件

  删除230行"typedef __int8 int8_t;"

  2. 修改note.h文件

  将46行"uint16_t sheet_notes"替换为"uint16_t sheet_notess"

  3. 修改note.cpp文件

  将342行"last_sheet.sheet_notes"替换为"last_sheet.sheet_notess"

  将355行"sn.sheet_notes"替换为"sn.sheet_notes"

  将358行"sn.sheet_notes"替换为"sn.sheet_notes"

  4. 修改formula.cpp文件

  将917行"function_property p = (function_property) {CELLOP_AS_VALUE, A_UNKNOWN};"替换为"function_property p{CELLOP_AS_VALUE, A_UNKNOWN};"

  5. 修改createDLL.cpp文件

  在385行添加"__xmm@",否则编译"xlslib_dll"项目会出现"error LNK2001: 无法解析的外部符号 __xmm@00000000000000000000000000000002"

  "__xmm@00000000000000000000000000000002"符号是在构造函数初始化列表中枚举类型赋初始值时,VS2015编译时自动创建的,在VS2010中不会创建这个符号,添加到filterSymbols数组是为了将不需要导出的符号过滤掉。

原文地址:https://www.cnblogs.com/dongc/p/8256813.html