在64位win11系统下,使用vs2015+Cmake编译TI_DLP_SDK


TI官方给出的DLP-ALC-LIGHTCRAFTER-SDK使用的是mingw生成,但我希望能够在VS上实现编译,方便后续的调试。官方并不支持使用VS编译,网络上相关的资源也比较少。经过一个多星期的摸索,我终于使用VS2015成功编译。现将整个过程记录下来,希望能给有类似困惑的朋友们提供一些帮助。本次主要参考指南为 how to build dlp 3d sdk with vs2015.pptx,我也将按照PPT中的顺序,逐步进行(PPT来源以及下载地址我将放在文章末尾)。

一、系统与软件

  1. Win11 X64
  2. Visual Studio 2015
  3. Cmake 3.6.1
  4. OpenCV3.1.0
  5. FlyCapture 2.12.3.31 SDK - Windows (64-bit)
    这里的软件版本是PPT中给出的,我也尝试过使用不同版本编译,但最终都没有成功。如果大家在使用不同版本编译过程中发生错误,可以尝试更换软件版本。

二、编译过程

1.使用cmake生成OpenCV

设置source和build的文件路径,选择VS 14 2015 win64进行configure。
在编译的过程中,如果Cmake出现如下图报错,是因为文件不完整,需要重新下载一个完整文件,放到对应的文件夹中,替换掉原来的缺损文件,文件夹路径位置可以参考PPT。(相关文件我会整理好放到文章末尾处)

在这里插入图片描述
在这里插入图片描述
这里需要注意,CMAKE第一次报错时,downloads文件夹中只有一个文件“89c783eee1c47bfc733f08334ec2e31c”,需要先将完整的opencv_ffmpeg.dll放入文件夹中进行替换,回到CMAKE中,再次点击configure,会继续报出关于另一个文件的错误。与此同时,downloads文件夹中也会出现新的文件35fe6ccdda6d7a04e9056b0d73b98e76,重复与上面同样的操作,替换为完整文件。以此类推,直至configure不再报错。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当configure不再报错后,勾选“BUILD_opencv_world”
在这里插入图片描述
然后将ws2_32.lib复制粘贴到C:/windows/System32/路径下,ws2_32.lib在电脑上有多个,我选择的是C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x64\WS2_32.Lib。
configure无误后,点击generate。打开OpenCV.sln。
在这里插入图片描述

在工具栏中找到“生成”–>“批生成”,只勾选两处“INSTALL”,点击“生成”。这个过程耗时比较长。

在这里插入图片描述
在这里插入图片描述
编译成功82个,与PPT上的数量有出入,但具体原因我也没有搞清楚,如果有知道的朋友,恳请赐教!
最后,将文件路径F:\OpenCV3.1.0\OpenCV_bld\install\x64\vc14\bin添加到系统的环境变量中。
在这里插入图片描述
在这里插入图片描述
到这里,OpenCV的工作就结束了,如果大家在上述过程中遇到了其他问题,可以参考这篇文章

win10X64 + vs2015通过Cmake编译Opencv
https://blog.csdn.net/u013832707/article/details/53127710

2.使用cmake生成DLP SDk

首先依然是设置source和build的文件路径,选择VS 14 2015 win64进行configure。参照PPT或者我给出的图片进行路径设置,需要注意ws2_32.lib的路径,我这里参照PPT上的路径,将ws2_32.lib复制到了路径F:\TexasInstruments-DLP\DLP-ALC-LIGHTCRAFTER-SDK-2.0\DLP-ALC-LIGHTCRAFTER-SDK\3rd_party。
PG的路径需要先安装FlyCapture 2.12.3.31 SDK - Windows (64-bit) ,再去设置。

在这里插入图片描述

在这里插入图片描述
配置好路径后,点击configure,我这里会报错,显示缺少部分文件(我猜测可能就是我比PPT上少的那几个)。说一下我的解决办法:
报错显示找不到相应文件,所以我先试着在整个计算机上搜索同名文件,发现并没有,又试着去掉版本号“310”再次搜索,发现有“libopencv_calib3d2410.dll”,这个文件是我在按照TI官方给出的指导手册《DLP® Advanced Light Control Software Development Kit for Lightcrafter™ Evaluation Modules User’s Guide》,使用mingw编译OpenCV2.4.10产生的,所以我尝试使用同样的方法,使用mingw编译OpenCV3.1.0以获取缺少的文件(我将这些文件打包放到文末,大家可以下载使用)。
最后将对应文件复制到F:\OpenCV3.1.0\OpenCV_bld\bin路径下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
继续configure,仍报错显示缺少文件,这两个文件在老版本的SDK中存在,如FlyCapture_2.10.3.266_x86,所以我将两个dll文件从FlyCapture_2.10.3.266_x86复制到FlyCapture 2.12.3.31 SDK - Windows (64-bit)中(路径F:\FlyCapture2.12.3.31X64\bin64\vs2015),再次点击configure,没有错误。点击generate。(这两个文件也放在文章末尾)
在这里插入图片描述
打开DLP_SDK.sln,在批生成中选择DLP_SDK的两项,点击生成。
在这里插入图片描述
编译器报错:
错误1:

在这里插入图片描述
定位到报错位置,修改代码

        std::istringstream ss(trimmed);
        T result;
        //long double number;
		long number;//注释掉原来的(上一行),添加这一行代码
        long long number_int;

        switch(base){
        case 8:
            ss >> std::oct >> number_int;          // Convert string to number
            result = (T) number_int;
            break;
        case 16:
            ss >> std::hex >> number_int;          // Convert string to number
            result = (T) number_int;
            break;
        case 10:
        default:
            ss >> std::dec >> number;          // Convert string to number
            result = (T) number;
        }

参考帖子:
https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/869292/dlp-alc-lightcrafter-sdk-errors-in-other-hpp-c2440-conversion-cannot-convert-from-long-double-to-t-compiling-dlp-sdk-in-vs2017-debug-x64?tisearch=e2e-sitesearch&keymatch=DLP%25252525252520SDK#

错误2:
在这里插入图片描述
解决办法:
修改代码
在other.hpp中

    template <typename T>
    std::string ToString( T number ){
        std::ostringstream ss;
        ss << std::setprecision(NUM_TO_STRING_PRECISION);
        //ss << number;
		ss << (unsigned int) number;//注释掉原来的(上一行),添加这一行代码
        return ss.str();
    }

    template <> std::string ToString<std::string>( std::string string );
    template <> std::string ToString<char>( char number );
    template <> std::string ToString<unsigned char>( unsigned char number );
	template <> std::string ToString<float>(float number);//新加入的
}

在other.cpp中,大概301行处,添加下方代码

template <> std::string Number::ToString<float>(float number) {
	std::ostringstream ss;
	ss << number;
	return ss.str();
}

参考帖子:
https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/818723/dlp-alc-lightcrafter-sdk-dlp-alc-lightcrafter-sdk/3084671?tisearch=e2e-sitesearch&keymatch=VS%20DLP#3084671

错误3:
在这里插入图片描述
解决方法:在末尾加一个return 0;
在这里插入图片描述
修改完成后,成功编译DLP_SDK
在这里插入图片描述
到这里,生成DLP_SDK的工作也结束了。

3.生成DLP 4500 APP

同样的,设置source和build路径,选择vs 2015 win64,点击configure
在这里插入图片描述
参照PPT设置各个路径以及CMAKE_CONFIGURATION_TYPES设为Release。
在这里插入图片描述
打开DLP_LCR4500_MV_APP.sln
在这里插入图片描述
如果编译后出现下面的报错,则需要在“附加依赖项”中添加setupapi.lib。
在这里插入图片描述
在这里插入图片描述
再次编译,没有错误
在这里插入图片描述
到这里,我认为编译已经基本成功了。
后来我又使用cmake重新生成DLP 4500 APP,将CMAKE_CONFIGURATION_TYPES设为Debug;Release;
但在使用Debug编译时,编译器报错如下图
在这里插入图片描述
报错的原因主要是在Debug中使用了release的库,需要将附加依赖项中的lib改为debug路径中的。

参考文章:https://blog.csdn.net/qq_41507735/article/details/126059788

这两个文件在DLP_SDK.sln中使用Debug编译一次,便会在F:\TexasInstruments-DLP\DLP-ALC-LIGHTCRAFTER-SDK-2.0_bld\lib\Debug路径下找到。
在这里插入图片描述
编译成功!
在这里插入图片描述


终于写到了文章结尾,这篇文章即是对我这一个多星期摸索的总结,也是希望对有同样困扰的朋友提供一些帮助。这是我第一次写博客,多有不足,希望大家多多包涵,如果有文中有出错的地方,欢迎大家批评指正,对我来说也是一个宝贵的学习交流的机会。我本科是机械专业,读研后由于课题需要,转到结构光领域,对于这个领域认识浅显,希望能和同好们多多交流。

三、参考文章及相关文件下载:

  1. how to build dlp 3d sdk with vs2015.pptx(TI论坛中给出的PPT,是本次最主要的参考)

文件来源:https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/749850/compiler-dlp4500-need-some-other-library

  1. 持久决心,win10X64 + vs2015通过Cmake编译Opencv

https://blog.csdn.net/u013832707/article/details/53127710

  1. TI官方论坛

https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/869292/dlp-alc-lightcrafter-sdk-errors-in-other-hpp-c2440-conversion-cannot-convert-from-long-double-to-t-compiling-dlp-sdk-in-vs2017-debug-x64?tisearch=e2e-sitesearch&keymatch=DLP%25252525252520SDK#
https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/818723/dlp-alc-lightcrafter-sdk-dlp-alc-lightcrafter-sdk/3084671?tisearch=e2e-sitesearch&keymatch=VS%20DLP#3084671

  1. qq_41507735,解决:检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2””。

https://blog.csdn.net/qq_41507735/article/details/126059788

  1. 文件下载链接
    文件目录
    ├── FlyCapture2.12.3.31缺失文件
    │ ├── FlyCapture2.dll
    │ ├── FlyCapture2_C.dll
    ├── OpenCV3.1.0缺失文件
    │ ├── libopencv_calib3d310.dll
    │ ├── libopencv_features2d310.dll
    │ ├── libopencv_imgproc310.dll
    │ ├── libopencv_core310.dll
    │ ├── libopencv_highgui310.dll
    │ ├── libopencv_flann310.dll
    │ ├── files for opencv3.1.0 cmake.zip

链接: https://pan.baidu.com/s/1APpMPrqU_5_ZYuLavD2dSQ?pwd=1895 提取码: 1895

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值