libyuv windows x64编译方法

libyuv是Google开源的实现各种YUV与RGB之间相互转换、旋转、缩放的库。它是跨平台的,,支持SSE、AVX、NEON等SIMD指令加速.VS 2015 WIN64等编译出来的库无法使用SIMD指令,效率大大降低!

网上提供的办法都是基于gclient进行代码下载,由于google仓库在国外,翻墙需要花费大量人力物力,经过研究可以直接用clang来编译libyuv,特供大家参考.

 1.安装clang

  下载地址:https://releases.llvm.org/download.html#3.7.0

  Clang for Windows (64-bit) (.sig)

  需要将LLVM的BIN目录添加到环境变量中以便于命令可以运行clang

  安装完成以后可能提示缺少头文件,所以需要下载mingw64

   2.安装mingw64

  离线安装包x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z

  注意CPU架构选择x86_64,原因就是clang也使用的是该架构编译的

将mingw64下面的bin目录添加到环境变量中

  mingw安装完成后查看clang的版本如下:

3.安装cmake

https://cmake.org/download/

本人下载的是3.17.0

4.下载libyuv

https://github.com/lemenkov/libyuv

5.创建新的cmake工程 命名为libyuv_clang,然后创建目录src include lib等目录

1).将下载到libyuv的代码source所有代码全部拷贝到src中

2).将下载到libyuv的代码include所有代码拷贝到include中

3).lib可以添加def文件 .def文件格式定义在此不再累述

4).编写CMakelist.txt 如下:

cmake_minimum_required(VERSION 2.8)

SET (CMAKE_C_COMPILER             "clang")
SET (CMAKE_C_FLAGS                "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG          "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
 
SET (CMAKE_CXX_COMPILER             "clang++")
SET (CMAKE_CXX_FLAGS                "-Wall -std=c++11")
SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
 
SET (CMAKE_AR      "llvm-ar")
SET (CMAKE_LINKER  "llvm-ld")
SET (CMAKE_NM      "llvm-nm")
SET (CMAKE_OBJDUMP "llvm-objdump")
SET (CMAKE_RANLIB  "llvm-ranlib")


project(yuv)


#find_package(LLVM REQUIRED CONFIG)

SET(CMAKE_BUILD_TYPE Release)

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/OutPutlib)

#set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE ON)

include_directories(
${PROJECT_SOURCE_DIR}/include
${LLVM_INCLUDE_DIRS}
)


#add_definitions(${LLVM_DEFINITIONS})

set(libyuv_source
${PROJECT_SOURCE_DIR}/src/compare.cc          
${PROJECT_SOURCE_DIR}/src/compare_common.cc   
${PROJECT_SOURCE_DIR}/src/compare_gcc.cc      
${PROJECT_SOURCE_DIR}/src/compare_mmi.cc      
${PROJECT_SOURCE_DIR}/src/compare_msa.cc      
${PROJECT_SOURCE_DIR}/src/compare_neon64.cc   
${PROJECT_SOURCE_DIR}/src/compare_neon.cc     
${PROJECT_SOURCE_DIR}/src/compare_win.cc      
${PROJECT_SOURCE_DIR}/src/convert_argb.cc     
${PROJECT_SOURCE_DIR}/src/convert.cc          
${PROJECT_SOURCE_DIR}/src/convert_from_argb.cc
${PROJECT_SOURCE_DIR}/src/convert_from.cc     
${PROJECT_SOURCE_DIR}/src/convert_jpeg.cc     
${PROJECT_SOURCE_DIR}/src/convert_to_argb.cc  
${PROJECT_SOURCE_DIR}/src/convert_to_i420.cc  
${PROJECT_SOURCE_DIR}/src/cpu_id.cc           
${PROJECT_SOURCE_DIR}/src/mjpeg_decoder.cc    
${PROJECT_SOURCE_DIR}/src/mjpeg_validate.cc   
${PROJECT_SOURCE_DIR}/src/planar_functions.cc 
${PROJECT_SOURCE_DIR}/src/rotate_any.cc       
${PROJECT_SOURCE_DIR}/src/rotate_argb.cc      
${PROJECT_SOURCE_DIR}/src/rotate.cc           
${PROJECT_SOURCE_DIR}/src/rotate_common.cc    
${PROJECT_SOURCE_DIR}/src/rotate_gcc.cc       
${PROJECT_SOURCE_DIR}/src/rotate_mmi.cc       
${PROJECT_SOURCE_DIR}/src/rotate_msa.cc       
${PROJECT_SOURCE_DIR}/src/rotate_neon64.cc    
${PROJECT_SOURCE_DIR}/src/rotate_neon.cc      
${PROJECT_SOURCE_DIR}/src/rotate_win.cc       
${PROJECT_SOURCE_DIR}/src/row_any.cc          
${PROJECT_SOURCE_DIR}/src/row_common.cc       
${PROJECT_SOURCE_DIR}/src/row_gcc.cc          
${PROJECT_SOURCE_DIR}/src/row_mmi.cc          
${PROJECT_SOURCE_DIR}/src/row_msa.cc          
${PROJECT_SOURCE_DIR}/src/row_neon64.cc       
${PROJECT_SOURCE_DIR}/src/row_neon.cc         
${PROJECT_SOURCE_DIR}/src/row_win.cc          
${PROJECT_SOURCE_DIR}/src/scale_any.cc        
${PROJECT_SOURCE_DIR}/src/scale_argb.cc       
${PROJECT_SOURCE_DIR}/src/scale.cc            
${PROJECT_SOURCE_DIR}/src/scale_common.cc     
${PROJECT_SOURCE_DIR}/src/scale_gcc.cc        
${PROJECT_SOURCE_DIR}/src/scale_mmi.cc        
${PROJECT_SOURCE_DIR}/src/scale_msa.cc        
${PROJECT_SOURCE_DIR}/src/scale_neon64.cc     
${PROJECT_SOURCE_DIR}/src/scale_neon.cc       
${PROJECT_SOURCE_DIR}/src/scale_win.cc        
${PROJECT_SOURCE_DIR}/src/video_common.cc)


set(SOURCE_FILES ${libyuv_source})
#add_library(yuv SHARED ${SOURCE_FILES} ${PROJECT_SOURCE_DIR}/lib/libyuv.def)
add_library(yuv SHARED ${SOURCE_FILES})
target_link_libraries(yuv -fPIC -Wl,-Bsymbolic ${llvm_libs})

上述CMakeLists.txt C++11标准需要写到CMAKE_CXX_FLAGS 中不能采用set(CMAKE_CXX_STANDARD 11) 

如果采用set(CMAKE_CXX_STANDARD 11) 会报如下错误:

 \lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++\bits/std_abs.h:102:3: error:
      support for type '__float128' is not yet implemented
  abs(__float128 __x)

如果查找不到clang编译器,请将clang的bin目录添加到环境变量中

然后创建build目录

在目录中输入命令行:cmake -G "MinGW Makefiles" .. 正确运行截图如下:

在开始编译之前,先将mingw64/bin中mingw32-make.exe复制一份改名为make.exe

然后在命令行中输入make 开始编译,编译完成后如下:

dll以及.a文件生成在OutPutlib 目录中

该.a文件可以直接被VS编译器识别,也可以将其改成lib文件,如果需要自定义接口导出,请将接口填写在def文件中.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: VS2019是微软推出的一款集成开发环境,用于开发各种类型的应用程序。x64编译是指使用64位体系架构进行编译。 VS2019提供了强大的编辑器和调试工具,可以帮助开发人员在编写代码过程中提高效率和准确性。它支持多种编程语言,如C++、C#、VB.NET等,并且可以用于各种平台,包括Windows、Android、iOS等。 x64编译是一种针对64位操作系统的编译方式。相比于32位编译,x64编译可以充分利用64位系统的优势,如更大的内存寻址空间和更高的计算性能。这种编译方式通常适用于大型应用程序或需要处理大数据量的场景。 在VS2019中,进行x64编译的步骤如下: 1. 打开VS2019,选择需要编译的项目或创建一个新项目。 2. 在项目的属性设置中,选择“配置管理器”。 3. 在“配置管理器”中,选择目标平台为“x64”。 4. 确认其他编译选项,如运行时库、优化级别等。 5. 点击“确定”保存设置。 6. 在VS2019的工具栏中,选择“生成”->“生成解决方案”。 7. 等待编译过程完成,如果没有错误信息,则编译成功。 x64编译可以提高应用程序的性能和稳定性,因为它能够更好地利用硬件资源。但需要注意的是,使用x64编译时,需要确保所有使用的库文件、第三方组件等都是64位版本,以免出现兼容性问题。 总而言之,VS2019的x64编译是一种针对64位操作系统的编译方式,可以提高应用程序的性能和稳定性,使用过程中需要注意兼容性问题。 ### 回答2: VS2019是一款功能强大的集成开发环境,它可以支持x64平台的编译工作。在VS2019中使用x64编译,我们需要进行一些配置和设置。 首先,我们需要确保VS2019已经正确安装在我们的计算机上,并且含有x64的编译器。一般情况下,在VS2019的安装过程中会默认安装x64编译器,如果没有安装可以通过重新运行VS2019的安装程序来添加。 接下来,在VS2019中打开我们的项目,点击顶部菜单栏的“生成”选项,然后选择“配置管理器”。在配置管理器中,我们可以看到项目的配置和平台选项。 在这个页面中,我们需要选择对应的配置和平台。首先,确保当前的配置是我们想要编译的配置,一般是“调试”或“发布”;然后,点击“新建”按钮,选择“x64”作为新的平台。这样就设置好了我们的项目使用x64编译。 完成以上设置后,我们可以点击菜单栏的“生成”选项,选择“重新生成解决方案”来进行编译。VS2019会利用x64编译器将我们的代码编译为x64平台可执行文件。 总之,VS2019支持x64平台的编译工作,我们只需要在配置管理器中正确设置项目的配置和平台,然后重新生成解决方案就可以完成编译。使用VS2019,我们可以轻松地进行x64编译并运行我们的项目。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值