vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

原因我经常被问到各种OpenCV开发环境文件,从OpenCV3到OpenCV4,从OpenCV源代码编译到

扩展模块编译vs2015编译c 源码,从SIFT支持到CUDA支持,从OpenCV C++版本到OpenCV-Python版本。我被问了很多,我懒得回答,不是我的心态,而是我想到了一个更好的方法,可以节省一些时间vs2015编译c 源码,同时还有非常详细的学习如何构建OpenCV开发环境,如何编译OpenCV各种版本的支持,所以我录制了一系列OpenCV开发环境构建视频教程, 并且全部上传到B站,需要直接查看。如果有问题,可以在下面留言,方便后期的人更好的观看,希望做一个CGC,持续更新的视频内容!

视频内容

目前,我已经发布了八部OpenCV环境构建视频,包括OpenCV C++/OpenCV-Python/tensorflow安装、OpenCV源代码编译与支持。它们如下:

1. OpenCV-Python开发环境搭建
https://www.bilibili.com/video/av30953498

2. OpenCV3 源码编译与SIFT支持代码演示
https://www.bilibili.com/video/av31462516

3. OpenCV4 +VS2015 开发环境搭建
https://www.bilibili.com/video/av36486959

4. OpenCV4-Python开发环境搭建
https://www.bilibili.com/video/av41974149

5. widnows10 下 tensorflow1.x的安装
https://www.bilibili.com/video/av48003741

6. widnows 10 下tensorflow2.0 + CUDA安装
https://www.bilibili.com/video/av70734671

7. OpenCV4 + CUDA 支持编译与配置
https://www.bilibili.com/video/av71643385

8. OpenCV4 DNN加速支持 + IE源码编译与配置
https://www.bilibili.com/video/av71979782

另外,我通常会在我的 github 上写一些与 OpenCV 相关的示例代码,你需要看看:

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

https://github.com/gloomyfish1998/opencv_tutorial

常见问题

编译 SIFT 支持

OpenCV 3.4.1 及更高版本,你必须在 cmake 选择 non-free 来添加 SIFT 模块支持,而 OpenCV-Python 扩展模块早就去掉了 SIFT 支持,只剩下低版本,还是自己编译吧!

OpenVINO支持编译

OpenVINO 需要先安装 OpenVINO,然后才能编译支持!

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

不同版本问题

虽然 OpenCV3 和 OpenCV4 版本有很大不同,但必须注意的是,相同的代码可能很难在不同的版本上编译和执行!

CMake 问题:

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

CMake 由于各种 donwload 问题而失败,主要是因为很难下载一些第三方库,例如 ffmpeg、IPPICV 等,没办法,只是想办法让它可下载!如果CMake失败,将导致许多模块在后续的VS构建中失败!

原始OpenCV文章摘要

概述

我通常在Linux系统上开发PHP扩展,扩展是通过编译和安装方法添加的

因为当我开发 php-opencv 扩展时,一些扩展用户问我是否可以提供窗口扩展 dll 引用文件。

因此,我最近考虑支持 Window 平台,总结了在 Window 下开发 PHP 扩展和编译成 DLL 的经验。

官方文档

尽管PHP是正式可用的,但有一个官方文档提供了将DLL编译到Windows中的扩展。

当时我没有仔细阅读官方文件,徒劳地摆弄了几天。

1. 环保意图

这里详细介绍了环境,在官方文档中对环境的要求,Visual Studio环境可以直接用Visual Studioide安装。我

仍然认为我指的是Visual C++,所以运行phpsdk-vc15-x64会在Canotdeternine'vc15'目录下出错可以使用

此 IDE 安装 PHP 编译为 DLL 的环境

1.1 安装 Visual Studio (IDE)。

去官网下载Visual Studio Install

1.2 添加编译环境

在 Visual Studio Professional 2017 下选择“更改”后,选择“在相应环境中安装”

已经计划了这样一个必要的环境

2. 编译前设置创建目录 2.1ph-sdk-二进制工具

php-sdk-binary-tools是一个官方工具

1.下载 php-sdk-二进制工具

git clone https://github.com/Microsoft/php-sdk-binary-tools
cd php-sdk-binary-tools

2.

调用启动脚本,比如我在这里是php7.2,对应VisualStudio 201764位版本,调用phpsdk-vc15-x64.bat

运行它并注意 cmd 窗口的开头将使用 $ 符号。

3. 运行phpsdk_buildtree批处理脚本,该脚本将创建所需的目录结构:

phpsdk_buildtree phpdev

你会发现运行后,php-sdk-binary-tools 中多了一个 phpdev 目录

phpsdk_buildtree脚本将根据当前使用的 VC++ 版本创建路径,并切换到新创建的目录

4. 将 PHP 源代码解压缩到:F:wwwphp-sdk-binary-toolsphpdevvc##x##,

在提取 PHP 源代码的同一目录中,有一个 deps 目录。

5. 步入解压的PHP源目录,运行phpsdk_deps-u或phpsdk_deps--update--branchmaster,PHP会手动下载所需的依赖(PHP7用于自动下载php-DSP文件)。

3. 编译 PHP 3.1 以建立配置的环境

编译前调用 php-sdk-binary-tools 中的入门脚本,手动设置 phpsdk-vc15-x64 要.bat构建的环境 phpsdk-vc15-x64

3.2 执行构建会议

切换到 PHP 源根目录并执行 buildconf 命令。

如果提示输入错误:没有用于文件扩充“.js”的脚本引擎。

造成这种情况的主要原因是系统安装了IDE(Dreamwear,UltraEdit编译前修改js源码内容,EditPlus,我之前安装phpstorm时更改了它)并更改了.js文件的默认打开方法。

仅当您要直接执行 js 脚本时,才会出现此错误。

快捷键win+r,然后输入注册表编辑器,打开注册表编辑器,找到[HKEY_CLASSES_ROOT.js],双击默认值将其更改为“JSFile”。如图所示:

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

之后,可以成功执行

3.3 编译配置

运行以下命令编译 PHP 配置:

configure --disable-all  --enable-cli

注意:您可以适当调整,可以使用配置--help查看参数,例如

configure --disable-all  --enable-cli --enable-debug --with-all-shared

成功执行后,系统将提示您执行 nmake

执行此步骤将在主目录中生成 config.w32.h 文件,这是编译 PHP 扩展所必需的

所以如果它是一个编译的PHP扩展,

下一个 nmake 被执行,如果它只是一个 PHP 编译扩展,则无法执行 'nmake'

3.4 执行 nmake 编译

之后,执行 nmake 开始编译

等待几分钟后,应该足以在 php-src 目录中找到一个带有额外编译位(x32 或 x64)的目录,并且目录中有 Release_TS(或 Release_NTS 或 Debug_TS)目录

如果编译正常编译前修改js源码内容,下面会有一个PHP.exe文件,证明PHP文件的编译成功

运行编译好的 php.exe-v 以查看它是否正常运行

4. 编译 PHP 扩展

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

4.1 创建 PHP 扩展

如果我们只是编译一些已经打开的扩展源代码,我们可以在这里创建一个演示扩展进行编译,而无需运行此步骤。

使用 gitbash 单步进入源代码的 addressext 目录并执行:

php.exe ext_skel_win32.php --extension=my_function

注意:为什么要使用 gitbash

这里的工具是因为 Gitbash 自带模拟 Linux 环境,my_function是我需要在这里创建的扩展,你可以根据自己修改

创建执行工具时没有提示“sh'isnotrecognizedasaninternalorexternalcommand,

gitbash 执行结果:

可以看到在源代码的 ext 目录下还有一个额外的my_function目录,这是我们刚刚使用 ext_skel_win32.php 命令创建的初始扩展代码

4.2 更改源代码

1.我们在my_function下编辑my_function.c文件。

添加一种方式my_function_test方式,代码如下:

PHP_FUNCTION(my_function_test) {
   php_printf("This is my function PHP extension! n");
}

2. 之后,将PHP_FE(my_function_test,NULL)添加到 constzend_function_entrymy_function_functions[],但在PHP_FE_END之前:

4.3 编译与扩展

切换回窗口的 cmd

1. 进入 php-sdk-binary-tools 目录并使用 phpsdk-vc15-x64 .bat

2. 切换到 PHP 源目录并运行 BuildConf

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

3. 如果在执行构建会议后执行配置命令,将提示类似于以下内容的错误:

打开提示文件,找到对应的行数,发现末尾还有多余的注释符号。这可能是工具的问题

解决方案:打开扩展源代码的 config.w32,找到 //否则,useARG_ENABLE此注释中删除,然后重新运行 buildconf。

注意:

运行 configure--help 会注意到还有更多 --enable-my_function 选项:

4. 运行配置--禁用所有--启用-cli--启用-my_function=共享以编译配置:

检测到错误消息:

F:wwwphp-sdk-binary-toolsphpdevvc15x64php-7.2.12-srcconfigure.js(5490, 2) Microsoft JScript 运行时错误: 'PHP_EXTNAME_SHARED' 未定义

解决方案:重新打开扩展的 config.w32 文件并删除右侧的映像,PHP_EXTNAME_SHARED“/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1”

重启 buildconf->运行编译配置命令,可以看到编译配置成功提示启用扩展: 不仅仅是我们的扩展:

5.运行nmake命令进行编译,等待几分钟到十几分钟后,如果终端出现类似下面的编译成功,则表示编译成功

但是,我发现源目录下还有一个额外的x64目录,如果编译的东西32位是x86,

上面有一个Release_TS(发布代表非调试,对应于调试,TS是线性安全的,对应于NTS)。

上面的文件是我们编译的PHP文件

,但我们发现php_my_function.dll文件就是我们编译的扩展文件。

vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题

6. 为 PHP .ini引用编译配置扩展

单步进入编译目录,运行 php.exe-v 测试编译是否正常

运行 php.exe--

ini 命令,你会发现没有配置文件,但是运行 php.exe-m 会发现没有我们在 PHPModules 中创建的my_function扩展

复制 php

.ini开发在源码到编译目录下,改名改为 php.ini,再更改 php .ini文件

源语言:

; On windows:
; extension_dir = "ext"

将其替换为:

; On windows:
extension_dir = "./"

但:

再次运行 php-m 测试

7. 测试

添加测试文件测试.php

<?php
my_function_test();

之后,运行生成的 PHP 目录php.exetest.php

至此,编译 PHP 和在窗口下编译 PHP 扩展已经成功。

本作品迭代参考采用“CC合同”,转载须注明作者及本文链接

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 vs2015编译c 源码-教程 |看完可以解决各种OpenCV环境建设和源码编译问题 https://www.wkzy.net/game/130913.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务