ncnn.lib : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MT_StaticRelease”

项目场景:

VS2015 Release win32


项目目的:

编译ncnn库时,默认是MD,项目工程需要MT


问题描述:

出现:/MD与/MT不匹配报错


解决方案:

步骤

①CMake编译:下载Protobuf源码-》编译(选择Protobuf源码下的cmake文件夹、新建存放编译的文件夹1)-》Configure-》选择VS、x86、Arm及x64-》去除protobuf_BUILD_TESTS的✔-》在新建的文件夹1中新建一个命名为“install”的文件夹,CMAKE_INSTALL_PREFIX处使用install文件夹路径-》若需要动态链接库,✔protobuf_BUILD_SHARED_LIBS(不需要跳过)-》点击Generate-》文件夹1中“protobuf.sln”用VS中生成(B)下的批生成(T)按需生成

②NCNN源码下新建文件夹1(名称自取)用于存放编译后的内容-》打开x86 Native Tools Command Prompt-》cd 进入文件夹1路径-》按照接下来的步骤(其中“../”使用自己文件夹路径,强调:cmake3.15以上、NCNN_BUILD_WITH_STATIC_CRT=ON):

cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=../install/include -DProtobuf_LIBRARIES=../install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=../install/bin/protoc.exe -DNCNN_VULKAN=off -DOpenCV_DIR../Buildx86/install -DNCNN_BUILD_WITH_STATIC_CRT=ON ..

nmake

nmake install

//如有错误,望批评指正~~

看起来这里有一个错误的信息,因为 `ncnn::Mat` 类型并没有直接提供一个名为 `format` 的成员变量。`ncnn::DataFormat` 是 NCNN(Neural Computation Network)框架用于描述数据布局的一种枚举类型,比如常见的 `f32` 表示单精度浮点数(32位)。如果这句话是在尝试设定 `ncnn_processed_image` 的数据格式,那可能是想间接指定矩阵内数据的存储方式或数据类型的转化。 假设你想要确保 `ncnn_processed_image` 的数据是以单精度浮点数 (fp32) 存储,可能需要先检查原始 `processed_image` 的数据类型并转换,然后再创建 `ncnn::Mat`。例如,如果你已经确认 `processed_image` 是 `uchar4`(四个字节的无符号字符,通常用于表示像素的RGBA),那么你需要将其转换为 fp32 格式,如下所示: ```cpp if (processed_image.type() == CV_8UC4) { cv::Mat temp(processed_image.size(), CV_32FC4); cv::cvtColor(processed_image, temp, cv::COLOR_RGBA2BGRA); // 将RGBA转换为BGRA,再转为fp32 ncnn::Mat ncnn_temp(temp.size(), ncnn::DataType::f32); memcpy(ncnn_temp.data, temp.ptr<float>(), sizeof(float) * temp.total()); ncnn_processed_image = ncnn_temp; } ``` 在这个例子中,`temp` 是临时 `cv::Mat` 用于转换数据,而 `ncnn_temp` 是最终的 NCNN 可接受的 `ncnn::Mat`。然后才设置了 `ncnn_processed_image` 作为 fp32 格式。 请注意,这里的代码并NCNN官方提供的,实际情况可能会依赖于NCNN的具体接口和库函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值