brotli-1.1.0-windows编译

        本文操作按照《c&c++开源库编译指南》中内容规范编写,编译环境配置、工具下载、目录规划,及更多其他开源库编译方法请参考该文章。

        c&c++开源库编译指南:https://blog.youkuaiyun.com/binary0006/article/details/144086155

        本文章中的源代码已提交到gitee仓库,地址:https://gitee.com/binary0010/depends/tree/master/c/brotli-1.1.0

1.brotli概述

        brotli 是 Google 开发的高效无损压缩算法,基于 LZ77 和霍夫曼编码,通过字典优化与灵活压缩级别(0-11),在文本、代码等场景下实现比 gzip 高约 20% 的压缩率,同时保持快速解压速度。其流式处理特性适配现代网络协议,成为 Web 性能优化的核心技术之一。

        brotli 广泛用于 Web 服务器(Nginx/Apache)与浏览器(Chrome/Firefox),通过 HTTP 压缩减少传输体积。移动端(如 Android)及文件存储领域(日志、配置)亦依赖其高压缩率降低资源消耗。开源代码支持多语言实现,BSD 许可推动跨平台集成,已成为 HTTPS 场景下提升数据传输效率的标准方案。

2.brotli编译

2.1.源代码下载

        brotli源代码可以在github上下载,源代码下载地址:https://github.com/google/brotli/tags,找到最新版1.1.0版本,点击下图所示链接直接下载即可。

        也可以自己复制这个地址下载:https://github.com/google/brotli/archive/refs/tags/v1.1.0.tar.gz 

2.2.windows编译

        先解压源代码到指定目录,brotli源代码中已经提供了CMakeList.txt脚本,后面我们按照规范会对该脚本进行修改。

2.2.1.源代码修改 

        由于brotil代码是c语言的,在vs2008中只支持c89标准语法,brotil代码中有一部分c99标准语法,为了支持vs2008我们对源代码进行修改。

2.2.2.修改CMake脚本

        修改CMake脚本按照我们的设计的编译规范来进行构建和编译,修改源代码根目录下的CMakeLists.txt即可。

        脚本涉及的内容主要是使用我们编译规范来对工程命名和输出,以及mt工程的链接库设置。

        CMakeLists.txt完整内容:

 

# Available CMake versions:
# - Ubuntu  20.04 LTS   : 3.16.3
# - Solaris 11.4 SRU 15 : 3.15
cmake_minimum_required(VERSION 3.15)

# Since this project's version is loaded from other files, this policy
# will help suppress the warning generated by cmake.
# This policy is set because we can't provide "VERSION" in "project" command.
# Use `cmake --help-policy CMP0048` for more information.
cmake_policy(SET CMP0048 NEW)
project(brotli C)

option(BUILD_SHARED_LIBS "Build shared libraries" ON)

if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  message(STATUS "Setting build type to Release as none was specified.")
  set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE)
else()
  message(STATUS "Build type is '${CMAKE_BUILD_TYPE}'")
endif()

include(CheckCSourceCompiles)
check_c_source_compiles(
  "#if defined(__EMSCRIPTEN__)
   int main() {return 0;}
   #endif"
  BROTLI_EMSCRIPTEN
)

if(BROTLI_EMSCRIPTEN)
  message("-- Compiler is EMSCRIPTEN")
else()
  message("-- Compiler is not EMSCRIPTEN")
endif()

# If Brotli is being bundled in another project, we don't want to
# install anything.  However, we want to let people override this, so
# we'll use the BROTLI_BUNDLED_MODE variable to let them do that; just
# set it to OFF in your project before you add_subdirectory(brotli).
get_directory_property(BROTLI_PARENT_DIRECTORY PARENT_DIRECTORY)

if(NOT DEFINED BROTLI_BUNDLED_MODE)
  # Bundled mode hasn't been set one way or the other, set the default
  # depending on whether or not we are the top-level project.
  if(BROTLI_PARENT_DIRECTORY)
    set(BROTLI_BUNDLED_MODE ON)
  else()
    set(BROTLI_BUNDLED_MODE OFF)
  endif()
endif()

mark_as_advanced(BROTLI_BUNDLED_MODE)

include(GNUInstallDirs)

# Reads macro from .h file; it is expected to be a single-line define.
function(read_macro PATH MACRO OUTPUT)
  file(STRINGS ${PATH} _line REGEX "^#define +${MACRO} +(.+)$")
  string(REGEX REPLACE "^#define +${MACRO} +(.+)$" "\\1" _val "${_line}")
  set(${OUTPUT} ${_val} PARENT_SCOPE)
endfunction(read_macro)

# Version information
read_macro("c/common/version.h" "BROTLI_VERSION_MAJOR" BROTLI_VERSION_MAJOR)
read_macro("c/common/version.h" "BROTLI_VERSION_MINOR" BROTLI_VERSION_MINOR)
read_macro("c/common/version.h" "BROTLI_VERSION_PATCH" BROTLI_VERSION_PATCH)
set(BROTLI_VERSION "${BROTLI_VERSION_MAJOR}.${BROTLI_VERSION_MINOR}.${BROTLI_VERSION_PATCH}")
mark_as_advanced(BROTLI_VERSION BROTLI_VERSION_MAJOR BROTLI_VERSION_MINOR BROTLI_VERSION_PATCH)

# ABI Version information
read_macro("c/common/version.h" "BROTLI_ABI_CURRENT" BROTLI_ABI_CURRENT)
read_macro("c/common/version.h" "BROTLI_ABI_REVISION" BROTLI_ABI_REVISION)
read_macro("c/common/version.h" "BROTLI_ABI_AGE" BROTLI_ABI_AGE)
math(EXPR BROTLI_ABI_COMPATIBILITY "${BROTLI_ABI_CURRENT} - ${BROTLI_ABI_AGE}")
mark_as_advanced(BROTLI_ABI_CURRENT BROTLI_ABI_REVISION BROTLI_ABI_AGE BROTLI_ABI_COMPATIBILITY)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../cmake ${CMAKE_MODULE_PATH})
include(${CMAKE_CURRENT_SOURCE_DIR}/../../cmake/third-common.cmake)

set(INSTALL_BIN_DIR "${third-bin}/${PROJECT_NAME}-${B
name: UB-GOLD channels: - conda-forge - defaults dependencies: - brotli=1.1.0=h2466b09_3 - brotli-bin=1.1.0=h2466b09_3 - bzip2=1.0.8=h2bbff1b_6 - ca-certificates=2025.6.15=h4c7d964_0 - cairo=1.18.0=h1fef639_0 - chardet=5.2.0=pyhd8ed1ab_3 - contourpy=1.3.2=py310hc19bc0b_0 - cudatoolkit=11.8.0=h09e9e62_13 - cycler=0.12.1=pyhd8ed1ab_1 - expat=2.7.1=h8ddb27b_0 - faiss=1.9.0=py310cuda118h41c283c_0_cuda - faiss-gpu=1.9.0=hef1f8eb_0 - font-ttf-dejavu-sans-mono=2.37=hab24e00_0 - font-ttf-inconsolata=3.000=h77eed37_0 - font-ttf-source-code-pro=2.038=h77eed37_0 - font-ttf-ubuntu=0.83=h77eed37_3 - fontconfig=2.14.2=hbde0cde_0 - fonts-conda-ecosystem=1=0 - fonts-conda-forge=1=0 - fonttools=4.58.5=py310hdb0e946_0 - freetype=2.12.1=hdaf720e_2 - freetype-py=2.3.0=pyhd8ed1ab_0 - greenlet=3.2.3=py310h9e98ed7_0 - icu=73.2=h63175ca_0 - intel-openmp=2024.2.1=h57928b3_1083 - kiwisolver=1.4.8=py310he9f1925_1 - lcms2=2.16=h67d730c_0 - lerc=4.0.0=h6470a55_1 - libblas=3.9.0=32_h641d27c_mkl - libboost=1.84.0=h9a677ad_3 - libboost-python=1.84.0=py310h3e8ed56_7 - libbrotlicommon=1.1.0=h2466b09_3 - libbrotlidec=1.1.0=h2466b09_3 - libbrotlienc=1.1.0=h2466b09_3 - libcblas=3.9.0=32_h5e41251_mkl - libdeflate=1.20=hcfcfb64_0 - libfaiss=1.9.0=cuda118h51f90d9_0_cuda - libffi=3.4.4=hd77b12b_1 - libglib=2.80.2=h0df6a38_0 - libhwloc=2.11.2=default_hc8275d1_1000 - libiconv=1.18=h135ad9c_1 - libintl=0.22.5=h5728263_3 - libjpeg-turbo=3.1.0=h2466b09_0 - liblapack=3.9.0=32_h1aa476e_mkl - libpng=1.6.43=h19919ed_0 - libtiff=4.6.0=hddb2be6_3 - libwebp-base=1.5.0=h3b0e114_0 - libxcb=1.15=hcd874cb_0 - libxml2=2.12.7=h283a6d9_1 - libzlib=1.2.13=h2466b09_6 - m2w64-gcc-libgfortran=5.3.0=6 - m2w64-gcc-libs=5.3.0=7 - m2w64-gcc-libs-core=5.3.0=7 - m2w64-gmp=6.1.0=2 - m2w64-libwinpthread-git=5.0.0.4634.697f757=2 - matplotlib-base=3.10.1=py310h37e0a56_0 - mkl=2024.2.2=h66d3029_15 - msys2-conda-epoch=20160418=1 - munkres=1.1.4=pyhd8ed1ab_1 - openjpeg=2.5.2=h3d672ee_0 - openssl=3.5.1=h725018a_0 - packaging=25.0=pyh29332c3_1 - pandas=2.1.4=py310hecd3228_0 - pcre2=10.43=h17e33f8_0 - pixman=0.46.2=had0cd8c_0 - pthread-stubs=0.4=hcd874cb_1001 - pthreads-win32=2.9.1=h2466b09_4 - pycairo=1.27.0=py310hb6096a9_0 - pyparsing=3.2.3=pyhd8ed1ab_1 - python=3.10.18=h981015d_0 - python-dateutil=2.9.0.post0=pyhe01879c_2 - python-tzdata=2025.2=pyhd8ed1ab_0 - python_abi=3.10=2_cp310 - pytz=2025.2=pyhd8ed1ab_0 - qhull=2020.2=hc790b64_5 - rdkit=2023.09.6=py310he5583f7_2 - reportlab=4.4.1=py310ha8f682b_0 - rlpycairo=0.2.0=pyhd8ed1ab_0 - setuptools=78.1.1=py310haa95532_0 - six=1.17.0=pyhd8ed1ab_0 - sqlalchemy=2.0.41=py310ha8f682b_0 - sqlite=3.45.3=h2bbff1b_0 - tbb=2021.13.0=h62715c5_1 - tk=8.6.14=h5e9d12e_1 - typing_extensions=4.14.1=pyhe01879c_0 - tzdata=2025b=h04d1e81_0 - ucrt=10.0.22621.0=h57928b3_1 - unicodedata2=16.0.0=py310ha8f682b_0 - vc=14.42=haa95532_5 - vc14_runtime=14.44.35208=h818238b_26 - vs2015_runtime=14.44.35208=h38c0c73_26 - wheel=0.45.1=py310haa95532_0 - xorg-libxau=1.0.11=hcd874cb_0 - xorg-libxdmcp=1.1.3=hcd874cb_0 - xz=5.6.4=h4754444_1 - zlib=1.2.13=h2466b09_6 - zstd=1.5.6=h0ea2cb4_0 - pip: - addict==2.4.0 - annotated-types==0.7.0 - beautifulsoup4==4.13.4 - certifi==2025.6.15 - charset-normalizer==3.4.2 - colorama==0.4.6 - cython==3.1.2 - dgl==2.2.1+cu121 - filelock==3.13.1 - fsspec==2024.6.1 - future==1.0.0 - gdown==5.2.0 - grakel==0.1.10 - idna==3.10 - jinja2==3.1.4 - joblib==1.5.1 - littleutils==0.2.4 - markupsafe==2.1.5 - mmcv-full==1.7.2 - mpmath==1.3.0 - munch==4.0.0 - networkx==3.3 - numpy==1.23.5 - ogb==1.3.6 - opencv-python==4.12.0.88 - outdated==0.2.2 - pillow==11.0.0 - pip==25.1.1 - platformdirs==4.3.8 - psutil==7.0.0 - pydantic==2.11.7 - pydantic-core==2.33.2 - pygcl==0.1.2 - pysocks==1.7.1 - pyyaml==6.0.2 - regex==2024.11.6 - requests==2.32.4 - scikit-learn==1.5.1 - scipy==1.15.3 - seaborn==0.13.2 - soupsieve==2.7 - sympy==1.13.3 - texttable==1.7.0 - threadpoolctl==3.6.0 - tomli==2.2.1 - torch==2.1.2+cu121 - torch-cluster==1.6.3+pt21cu121 - torch-geometric==2.4.0 - torch-scatter==2.1.2+pt21cu121 - torch-sparse==0.6.18+pt21cu121 - torch-spline-conv==1.2.2+pt21cu121 - torchdata==0.7.1 - tqdm==4.67.1 - typing-extensions==4.12.2 - typing-inspection==0.4.1 - urllib3==2.5.0 - yapf==0.43.0 prefix:D:\All-App\Anaconda3\envs\UB-GOLD上面是我想用anaconda移植到本地系统的environment.yml文件,里面有一些文件的格式 比如 - torch-cluster==1.6.3+pt21cu121是错的,麻烦帮忙修改一下,还有就是cuda版本应为12.1麻烦统一一下
07-10
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

binary0010

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值