openHEVC 编译 for VS2017+Win10 x64
编译暂未成功,有空再次更新
前期准备:
yasm下载:http://yasm.tortall.net/Download.html
http://www.tortall.net/projects/yasm/releases/vsyasm-1.3.0-win64.zip (用于集成)
2 http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe
3 http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz x
openHEVC源码下载: https://github.com/OpenHEVC/openHEVC
https://github.com/OpenHEVC/openHEVC/archive/hevc_rext.zip
SDL2.0下载:http://www.libsdl.org/download-2.0.php
http://www.libsdl.org/release/SDL2-2.0.5-win32-x64.zip
2 http://www.libsdl.org/release/SDL2-devel-2.0.5-mingw.tar.gz
CMake 3.8
下载:https://cmake.org/download/
https://cmake.org/files/v3.8/cmake-3.8.1-win64-x64.zip
FFmpeg 下载: https://ffmpeg.org/
http://ffmpeg.org/releases/ffmpeg-3.3.1.tar.bz2 (这个是源码)
http://ffmpeg.zeranoe.com/builds/win64/static/ffmpeg-20170503-a75ef15-win64-static.zip (已编译的程序)
pthreads-w32-2-9 openHEVC 中用到了线程,因此要下载:
ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
环境配置
1、解压源码
解压后目录及文件夹结构:
1 "D:\dev\Endvlib\cmake-3.8.1-win64-x64" 【已解压的目录】 以下类同
2 "D:\dev\Endvlib\ffmpeg-3.3.1"
3 "D:\dev\Endvlib\ffmpeg-20170503-a75ef15-win64-static"
4 "D:\dev\Endvlib\openHEVC-hevc_rext"
5 "D:\dev\Endvlib\pthreads-w32-2-9-1-release"
6 "D:\dev\Endvlib\SDL2-2.0.5-win32-x64"
7 "D:\dev\Endvlib\vsyasm-1.3.0-win64"
"D:\dev\Endvlib\cmake-3.8.1-win64-x64.zip" 【已下载的文件】 以下类同
"D:\dev\Endvlib\ffmpeg-3.3.1.tar.bz2"
"D:\dev\Endvlib\ffmpeg-20170503-a75ef15-win64-static.zip"
"D:\dev\Endvlib\openHEVC-hevc_rext.zip"
"D:\dev\Endvlib\pthreads-w32-2-9-1-release.zip"
"D:\dev\Endvlib\SDL2-2.0.5-win32-x64.zip"
"D:\dev\Endvlib\vsyasm-1.3.0-win64.zip"
"D:\dev\Endvlib\yasm-1.3.0-win64.exe"
2、取出 pthreadVC2.lib pthreadVC2.dll 这两个文件放到 build 下,(build在openHEVC文件里新建一个)
"D:\dev\Endvlib\pthreads-w32-2-9-1-release\Pre-built.2\dll\x64\pthreadGC2.dll"
"D:\dev\Endvlib\pthreads-w32-2-9-1-release\Pre-built.2\dll\x64\pthreadVC2.dll"
复制上述两个文件到:
"D:\dev\Endvlib\openHEVC-hevc_rext\build\pthreadGC2.dll"
"D:\dev\Endvlib\openHEVC-hevc_rext\build\pthreadVC2.dll"
从FFmpeg源码中拷贝以下几个文件到openHEVC同名字的文件夹下 (提示缺XXX函数在XXX中,引用无法找到:原因是缺以下几个文件: )
libavutil/fifo.c
libavcodec/frame_thread_encoder.c
"D:\dev\Endvlib\ffmpeg-3.3.1\libavutil\fifo.c"
"D:\dev\Endvlib\ffmpeg-3.3.1\libavcodec\frame_thread_encoder.c"
复制上述两个文件到:
"D:\dev\Endvlib\openHEVC-hevc_rext\libavutil\fifo.c"
"D:\dev\Endvlib\openHEVC-hevc_rext\libavcodec\frame_thread_encoder.c"
这两个文件可以放到C:\Windows下
打开CMakeLists.txt("D:\dev\Endvlib\openHEVC-hevc_rext\CMakeLists.txt")找到
#find_package(CRYPTOPP_FOUND)
find_package(SDL)
find_package(SDL2) set(libfilenames
libavutil/avstring.c
libavutil/atomic.c
libavutil/base64.c
libavutil/bprint.c
libavutil/buffer.c
libavutil/channel_layout.c
.............
在set命令中添加以下几条命令:set() 在Cmake中的意思是 将libavutil/avstring.c libavutil/atomic.c 等赋值给变量libfilenames;
#find_package(CRYPTOPP_FOUND)
find_package(SDL)
find_package(SDL2) set(libfilenames
libavutil/avstring.c
libavutil/atomic.c
libavutil/base64.c
libavutil/bprint.c
libavutil/buffer.c
libavutil/channel_layout.c
12 libavutil/fifo.c
13 libavcodec/frame_thread_encoder.c
然后在CMakeLists.txt中找到target_link_libraries(LibOpenHevcWrapper m) 这条语句,这条语句的作用是添加m.lib到LibOpenHevcWrapper这一项目的链接器中。然而m.lib是没有的,找不到,既不是编译阶段能产生的,网上也无法找到,谁知道!因此注释掉:Cmake中 “#”是注释命令!
if(CRYPTOPP_FOUND)
target_link_libraries(LibOpenHevcWrapper cryptopp)
else()
# target_link_libraries(LibOpenHevcWrapper m)
endif()
你会发现,上述的配置都是按64位的环境来配置的,包括库
准备工作弄完了,可以开始编译了:
1、在openHEVC文件夹里新建一个文件夹:习惯命名build (上面已经完成)
2、为了在别的电脑上(没安装SDL2.X)方便用,将准备过程中下载的SDL包解压后,放到openHEVC文件夹里 (可选,此步不执行)
3、将下载的
"D:\dev\Endvlib\yasm-1.3.0-win64.exe"
改名为 yasm.exe 放在openHEVC文件夹里(或系统目录里,例如C:\windows 其实放哪里都行,因为看图,你第一次运行 configure 后,出来的红色区域,路径都是可以改的)
我是直接复制进去重命名为 yasm.exe
4、(可选,此次不执行)将pthreadVC2.lib pthreadVC2.dll这两个文件放到build文件夹下(目的是为了等项目的解决方案即xxx.sln生成后,在链接器中加入pthreadVC2.lib)。也可以放在openHEVC文件夹里,通过在CMakeLists.txt加入以下红色语句:
add_library (LibOpenHevcWrapper ${libfilenames} ${YASM_OBJECTS}) //可以通过这条语句在CMakeLists.txt中定位要加的位置
#target_link_libraries(LibOpenHevcWrapper m)
set(pthreadPATH ../pthreadVC2)
target_link_libraries(LibOpenHevcWrapper ${LINK_LIBRARIES_LIST} ${pthreadPATH})
5、打开Cmake
即 运行 "D:\dev\Endvlib\cmake-3.8.1-win64-x64\bin\cmake-gui.exe"
如图:

路径是你自己的路径,路径配好后,点击configure,出现红色背景区域,这红色背景区域的地址都可以改的,特别的是将黄色方框标记的路径改成openHEVC里面的路径:不懂看图
第一次configure:

Finish


DEBUG: CMAKE_SYSTEM_PROCESSOR = AMD64
DEBUG: CMAKE_SYSTEM_NAME = Windows
DEBUG: SIZEOF_VOID_P =
Detected CPU: haswell
Found components for YASM
YASM_ROOT_DIR = C:/Program Files (x86)/openHEVC
7 YASM_INCLUDES = YASM_INCLUDES-NOTFOUND
8 YASM_LIBRARIES = YASM_LIBRARIES-NOTFOUND
9 Could NOT find SDL (missing: SDL_LIBRARY)
10 Could NOT find SDL2 (missing: SDL2_LIBRARY)
Configuring done
修改红色部份为:

SDL_LIBRARY D:/dev/Endvlib/SDL2-devel-2.0.-mingw/SDL2-2.0./x86_64-w64-mingw32/lib/libSDL2.a
SDL2_LIBRARY D:/dev/Endvlib/SDL2-devel-2.0.-mingw/SDL2-2.0./x86_64-w64-mingw32/lib/libSDL2.a
SDL2_INCLUDE_DIR D:\dev\Endvlib\SDL2-devel-2.0.-mingw\SDL2-2.0.\x86_64-w64-mingw32\include
SDLMAIN_LIBRARY D:/dev/Endvlib/SDL2-devel-2.0.-mingw/SDL2-2.0./x86_64-w64-mingw32/lib/libSDL2.a
YASM_EXECUTABLE D:/dev/Endvlib/vsyasm-1.3.-win64/yasm-1.3.-win64.exe
第二次configure:

搞了半天还有错误,不过项目是生成了
6. 点击Cmake的generate按钮,vs项目就生成了!
7、打开build文件夹,将里面没用的工程删掉,不然心烦,如下面左图,删掉后打开vs工程 后缀名为.sln的 就是解决方案的简称,没错打开的就是这个!发现如图右所示,按图右,在无法加载的工程上右击鼠标,选择移除。

右击LibOpenHevcWrapper项目,选择生成,会发现出现以下错误:
。。。。。。。。。
1 >C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): warning C4005: “vsnprintf”: 宏重定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): note: 命令行参数: 参见前面的“vsnprintf”定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): fatal error C1189: #error: Macro definition of vsnprintf conflicts with Standard Library function declaration
>idct_sse2_xvid.c
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): warning C4005: “vsnprintf”: 宏重定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): note: 命令行参数: 参见前面的“vsnprintf”定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): fatal error C1189: #error: Macro definition of vsnprintf conflicts with Standard Library function declaration
>qpeldsp_init.c
>videodsp_init.c
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): warning C4005: “vsnprintf”: 宏重定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): note: 命令行参数: 参见前面的“vsnprintf”定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): fatal error C1189: #error: Macro definition of vsnprintf conflicts with Standard Library function declaration
>strtod.c
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4273: “strtod”: dll 链接不一致
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdlib.h(): note: 参见“strtod”的前一个定义
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “=”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “函数”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4090: “函数”: 不同的“const”限定符
>D:\dev\Endvlib\openHEVC-hevc_rext\compat\strtod.c(): warning C4244: “=”: 从“__int64”转换到“double”,可能丢失数据
>snprintf.c
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): warning C4005: “vsnprintf”: 宏重定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): note: 命令行参数: 参见前面的“vsnprintf”定义
>C:\Program Files (x86)\Windows Kits\\Include\10.0.15063.0\ucrt\stdio.h(): fatal error C1189: #error: Macro definition of vsnprintf conflicts with Standard Library function declaration
>正在生成代码...
>已完成生成项目“LibOpenHevcWrapper.vcxproj”的操作 - 失败。
========== 生成: 成功 个,失败 个,最新 个,跳过 个 ==========
预处理定义
<PreprocessorDefinitions>WIN32;_WINDOWS;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR="Debug";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR="Debug";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR=\"Debug\";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR="Release";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR=\"Release\";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR=\"MinSizeRel\";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR="RelWithDebInfo";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;__SSE2__;__SSE3__;__SSSE3__;__SSE4_1__;__SSE4_2__;__AVX__;__SSE2AVX__;snprintf=avpriv_snprintf;vsnprintf=avpriv_vsnprintf;inline=__inline;restrict=__restrict;PIC;USE_SDL;CMAKE_INTDIR=\"RelWithDebInfo\";LibOpenHevcWrapper_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
WIN32
_WINDOWS
NDEBUG
__SSE2__
__SSE3__
__SSSE3__
__SSE4_1__
__SSE4_2__
__AVX__
__SSE2AVX__
snprintf=avpriv_snprintf
vsnprintf=avpriv_vsnprintf
inline=__inline
restrict=__restrict
PIC
USE_SDL
CMAKE_INTDIR="MinSizeRel"
LibOpenHevcWrapper_EXPORTS
解决办法:在libavcodec/avcodec.h 里面#include "version.h" 后面,其实随便。添加:
#define AV_CODEC_CAP_INTRA_ONLY 0x40000000
#define AV_CODEC_FLAG_QSCALE (1 << 1)
#define AV_CODEC_FLAG_PASS1 (1 << 9)
以上三条语句,根据这个错误在FFmpeg的文件夹libavcodec/avcodec.h里面去ctrl+f 查找,复制到openHEVC的libavcodec/avcodec.h里面
在运行,发现还是错误:如图中注释,总共有三处。
在运行,还是出现错误,如:还是注释掉这条语句,总共二处
在运行,还是出现错误:如:这里的错误,
可以这么解决,将pthreadVC2.lib pthreadVC2.dll拷贝到build文件夹下,然后在项目的链接器中加入pthreadVC2.lib。如
在运行,还是有错误:如:找到这些错误,注释掉,这个错误跟机器有关,我们只用到了x86.
在运行,相信会是对了。注意上面说的运行,只运行LibOpenHevcWrapper 项目
现在,将hevc_sdl2设置 为启动项,启动项的设置是右击hevc_sdl2,在填出菜单中,选择设置为启动项。
然后运行,OK,完美!!
最后,可能还出现一个问题,可能你在编译的时候在D盘进行,你突然想拷贝到E盘去运行,那么你可能还要做一步工作,如果出现了错误就按如下做:
用UltraEdit打开build文件夹下类似hevc_sdl2.vcxproj 这个带有.vcxpro后缀名的文件,然后ctrl+f 查找D:\openHEVC-hevc_rext\ ,统一都替换为../ 就ok 了!
openHEVC 编译 for VS2017+Win10 x64的更多相关文章
- win10 x64 VS2017 PJSIP 视频通话编译流程
win10 x64 VS2017 PJSIP 视频通话编译流程 1. 下载PJSIP源码 PJSIP源码下载地址:https://www.pjsip.org/ 2. 阅读一遍官方的文档 文档地址:ht ...
- 【E2E】Tesseract5+VS2017+win10源码编译攻略
一,记录我目前在win10 X64和VS2017的环境下成功编译Tesseract5.0的方式: 二,记录在VS2017 C++工程中调用Tesseract4.0的方法: 三,记录编译和调用Tesse ...
- Win10 x64 + CUDA 10.0 + cuDNN v7.5 + TensorFlow GPU 1.13 安装指南
Win10 x64 + CUDA 10.0 + cuDNN v7.5 + TensorFlow GPU 1.13 安装指南 Update : 2019.03.08 0. 环境说明 硬件:Ryzen R ...
- .Net编译环境x86,x64,anycpu的区别
一.定义 x86: 将程序集编译为由兼容 x86 的 32 位公共语言运行库运行. x64: 将程序集编译为由支持 AMD64 或 EM64T 指令集的计算机上的 64 位公共语言运行库运行. any ...
- cisco vpn client for win10 x64 setup package
win10 x64安装cisco vpn client报错,解决方法如下: 1.卸载以前安装的所有cisco vpn client,并重启电脑. 2.运行winfix.exe 3.安装Global V ...
- win10 x64中 windbg x64 安装配置符号库
根据系统安装好x64版本,我的系统是win10 x64 ; windbg下载地址 https://developer.microsoft.com/zh-cn/windows/hardware/down ...
- win7 x64和win10 x64 windbg 本地调试记录
今天看CSDN和某文档看了win7 64位 和win10 64位 的windbg本地调试内核的办法 win7 x64 Step1:kdbgctrl –db Step2:kdbgctrl –e Step ...
- Win10 x64 pnglib Release
Win10 x64 pnglib Release >------ 已启动生成: 项目: ZERO_CHECK, 配置: Release x64 ------ > Checking Buil ...
- Win10 x64 pnglib Debug
Win10 x64 pnglib Debug >------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ > Checking Build S ...
随机推荐
- web----Twisted
Twisted模块: Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等.
- python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)
函数的执行时,*打散.函数的定义时,*聚合. from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(* ...
- la 4015
题解: 烂大街的树形dp?? f[i][j]表示到i点,在i的子树中经过j个,且要返回i点的最小值 g[i][j]表示到i点,在i的子树中经过j个,且不用返回i点的最小值 然后转移做背包就可以了 (注 ...
- 使用sshtunnel实现python公网连接阿里云mongo服务器
背景: 公司使用阿里云的云数据库MongoDB.基于安全原因考虑,阿里云MongoDB云数据库目前只支持从阿里云ECS上访问,无法通过公网直接访问,不方便用户在本地开发环境里直接进行测试. 阿里云官方 ...
- Codeforces Round #392 (Div. 2)-D. Ability To Convert
D - Ability To Convert 题目大意:给你一个数字 n 接下来再输入一个数字 w(<10^60),表示w这个数字是 n 进制的, 并且超过十进制也用数字表示,这样就有多种组合了 ...
- 像素鸟 游戏开发教程 FlappyBird Game development tutorial
像素鸟 游戏开发教程 FlappyBird Game development tutorial 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com ...
- bzoj3545: [ONTAK2010]Peaks 重构树 主席树
题目链接 bzoj3545: [ONTAK2010]Peaks 题解 套路重构树上主席树 代码 #include<cstdio> #include<algorithm> #de ...
- BZOJ.4793.[CERC2016]Hangar Hurdles(Kruskal重构树 BFS)
题目链接 \(Description\) 有一个\(n\times n\)的正方形网格,上面有若干障碍点.\(q\)次询问,每次询问把一个正方形箱子从\((x1,y1)\)推到\((x2,y2)\) ...
- C++ 动态存储空间的分配和释放 new与malloc的区别
使用new申请空间: 特点: 1.没有名字,只能通过指针间接访问它们. 2.从堆中申请空间 分类: 变量: 语法:指针变量 = new 类型名; Delete 指针变量 举例:int *p; p=ne ...
- BZOJ4460 : [Jsoi2013]广告计划
首先预处理出$f[i][j]$表示第$i$位是字符$j$的字符串集合. 考虑枚举答案$n$,那么模式串中模$n$相同的字符都要按顺序在同一行出现. 设$g[i][j]$表示第$i$列开始出现模$n$为 ...