解决vs工程混合.c和.cpp文件编译遇到一系列void*无法转换成结构体的错误

  最近在项目中引入sqlite3加密(wxSQLite、SQLCipher)相关代码时,编译遇到如下错误:例如,error C2440: “初始化”: 无法从“void *”转换为“sqlcipher_provider *”

  分析发现如下原因:

    项目中工程的编译方式是“编译为C++代码(/TP)“,而我是将sqlite3.c手动拖入到工程中,打开.vcxproj工程文件可以看到如下按C方式编译的信息

    <ClCompile Include="sqlite3.c" >
      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">CompileAsC</CompileAs>
      <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">CompileAsC</CompileAs>
      <CompileAs Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|Win32'">CompileAsC</CompileAs>
      <CompileAs Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|Win32'">CompileAsC</CompileAs>
    </ClCompile>

   这样两者便有矛盾。

解决方法:

   方法1、不使用拖入sqlite3.c到工程的方式,改用项目中的CMake添加,查看工程文件可以看到是按如下默认方式加入工程

   <ClCompile Include="sqlite3.c" />

   方法2、右键打开工程属性->配置属性->C/C++->高级->编译为选项从“编译为C++代码(/TP)”改为“默认值”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值