nginx coturn socat privoxy opencv 静态编译

发布时间 2023-11-02 20:31:24作者: jingjingxyk

文档说明: 只记录关键的地方; 发文时间: 2023-11-02

意义: linux 环境,免安装 下载后即可使用

环境: alpine:3.18 docker clang

状态: 完善中

体验编译结果

nginx 静态编译关键点

nginx use PCRE2 library on nginx 1.21.5

hg 脚本全称是 mercurial

openssl zlib pcpre2 等静态库需要提构建好

nginx 静态编译,更多配置:nginx.php

  hg  clone -r default --rev=1  http://hg.nginx.org/nginx

  cd nginx

  cp -f auto/configure configure

  ./configure --help

  PACKAGES=" libxml-2.0 libexslt libxslt openssl zlib"
  PACKAGES="\$PACKAGES libpcre2-16  libpcre2-32  libpcre2-8   libpcre2-posix"

  CPPFLAGS="$(pkg-config  --cflags-only-I  --static \$PACKAGES)"
  LDFLAGS="$(pkg-config   --libs-only-L    --static \$PACKAGES)"
  LIBS="$(pkg-config      --libs-only-l    --static \$PACKAGES)"

   ./configure \
  --prefix=/usr/local/nginx/ \
  --with-http_ssl_module \
  --with-http_gzip_static_module \
  --with-http_stub_status_module \
  --with-http_realip_module \
  --with-http_auth_request_module \
  --with-http_v2_module \
  --with-http_v3_module \
  --with-http_flv_module \
  --with-http_sub_module \
  --with-stream \
  --with-stream_ssl_preread_module \
  --with-stream_ssl_module \
  --with-threads \
  --with-cc-opt="  -O2   \$CPPFLAGS " \
  --with-ld-opt=" -static \$LDFLAGS "      

   make -j $(nproc)
   make install 


coturn 静态编译

openssl zlib libevent hiredis libmongoc 等静态库需要提构建好

coturn 静态编译,更多配置:coturn.php

PACKAGES='sqlite3'
PACKAGES="\$PACKAGES libevent  libevent_core libevent_extra  libevent_openssl  libevent_pthreads"
PACKAGES="\$PACKAGES hiredis"
PACKAGES="\$PACKAGES libbson-static-1.0 libmongoc-ssl-1.0 libmongoc-static-1.0 "

export SSL_CFLAGS="$(pkg-config  --cflags-only-I  --static openssl ) "
export SSL_LIBS="$(pkg-config    --libs           --static openssl ) "


export CPPFLAGS="$(pkg-config  --cflags-only-I --static  \$PACKAGES)"
export LDFLAGS="$(pkg-config   --libs-only-L   --static  \$PACKAGES) --static "
export LIBS="$(pkg-config      --libs-only-l   --static    \$PACKAGES)  -lstdc++ -lm " #
export CFLAGS="-O3  -g  -std=gnu11 -Wall -static "

export DBCFLAGS="$(pkg-config  --cflags --static libpq sqlite3 hiredis libbson-static-1.0 libmongoc-ssl-1.0 libmongoc-static-1.0     )"
export DBLIBS="$(pkg-config     --libs  --static libpq sqlite3 hiredis libbson-static-1.0 libmongoc-ssl-1.0 libmongoc-static-1.0     )"



export OSLIBS="$(pkg-config    --libs          --static \$PACKAGES) -lstdc++ -lm "
export OSCFLAGS=\$CPPFLAGS

sed -i.backup  "s/libmongoc-1.0/libmongoc-static-1.0/" ./configure

./configure  \
--prefix=/usr/local/coturn/

make -j $(nproc)
make install            

socat 静态编译

socat 静态编译,更多配置:socat.php

PACKAGES='openssl readline'
CPPFLAGS="$(pkg-config  --cflags-only-I  --static \$PACKAGES)" \
LDFLAGS="$(pkg-config   --libs-only-L    --static \$PACKAGES)" \
LIBS="$(pkg-config      --libs-only-l    --static \$PACKAGES)" \
CFLAGS="-static -O2 -Wall -fPIC  -DWITH_OPENSSL" \
./configure \
--prefix=/usr/local/socat/ \
--enable-readline \
--enable-openssl-base=/usr/local/openssl/

make -j $(nproc)
make install 

privoxy 静态编译

privoxy 静态编译,更多配置:privoxy.php

autoheader
autoconf

PACKAGES="openssl zlib"
PACKAGES="\$PACKAGES  libbrotlicommon  libbrotlidec  libbrotlienc "
PACKAGES="\$PACKAGES libpcre  libpcre16  libpcre32  libpcrecpp  libpcreposix"
CPPFLAGS="$(pkg-config  --cflags-only-I --static \$PACKAGES )" \
LDFLAGS="$(pkg-config   --libs-only-L   --static \$PACKAGES )" \
LIBS="$(pkg-config      --libs-only-l   --static \$PACKAGES )" \
PCRE_STATIC=YES \
./configure \
--prefix=/usr/local/privoxy/ \
--enable-static-linking \
--with-openssl \
--without-mbedtls \
--with-brotli \
--with-docbook=yes

make -j $(nproc)
make install         

opencv 静态编译

待完善

需要提前准备好,ffmpeg zlib openssl libarchive libiconv 等静态库

opencv 静态编译,更多配置:opencv.php

PACKAGES='openssl  '
PACKAGES="\$PACKAGES  zlib"
PACKAGES="\$PACKAGES  libxml-2.0"
PACKAGES="\$PACKAGES  liblzma  libzstd liblz4 "
PACKAGES="\$PACKAGES  libavcodec libavdevice libavfilter libavformat libavutil libswresample libswscale"
PACKAGES="\$PACKAGES  libwebp libpng libpng16 libjpeg libturbojpeg SvtAv1Enc SvtAv1Dec "

PACKAGES="\$PACKAGES  dav1d sdl2 aom freetype2  gmp lcms2 " # libtiff-4
PACKAGES="\$PACKAGES  libbrotlicommon libbrotlidec libbrotlienc"
PACKAGES="\$PACKAGES  x264 vpx ogg opus openh264 libpcap fdk-aac fribidi librabbitmq x265 gflags "
PACKAGES="\$PACKAGES  fftw3q  Imath  libglog openblas blas64 lapack64 blas"


CPPFLAGS="$(pkg-config  --cflags-only-I  --static \$PACKAGES)"
LDFLAGS="$(pkg-config   --libs-only-L    --static \$PACKAGES) "
LIBS="$(pkg-config      --libs-only-l    --static \$PACKAGES)"

CPPFLAGS="\$CPPFLAGS -I{$bzip2_prefix}/include -I{$libiconv_prefix}/include -I{$bzip2_prefix}/include -I{$libxml2_prefix}/include " \
LDFLAGS="\$LDFLAGS -L{$bzip2_prefix}/lib -L{$libiconv_prefix}/lib" \
LIBS="\$LIBS -lbz2 -liconv " \


mkdir -p build
cd  build

cmake .. \
-G Ninja \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW \
-DOPENCV_EXTRA_MODULES_PATH="../opencv_contrib/modules" \
-DCMAKE_CXX_STANDARD=14 \
-DCMAKE_C_STANDARD=11 \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_STATIC_LIBS=ON \
-DBUILD_SHARED_LIBS=OFF \
-DOpenCV_STATIC=ON \
-DENABLE_PIC=ON \
-DWITH_FFMPEG=ON \
-DFFMPEG_ROOT={$ffmpeg_prefix} \
-DZLIB_ROOT={$zlib_prefix} \
-Dfreetype2_ROOT={$freetype_prefix} \
-DPNG_ROOT={$png_prefix} \
-DJPEG_ROOT={$jpeg_prefix} \
-DLAPACK_ROOT={$lapack_prefix} \
-DOpenBLAS_ROOT={$openblas_prefix} \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=ON \
-DBUILD_opencv_apps=ON \
-DCMAKE_PREFIX_PATH='{$CMAKE_PREFIX_PATH}' \
-DBUILD_opencv_js=OFF \
-DBUILD_JAVA=OFF \
-DBUILD_CUDA_STUBS=OFF  \
-DBUILD_FAT_JAVA_LIB=OFF  \
-DBUILD_ANDROID_SERVICE=OFF \
-DBUILD_OBJC=OFF \
-DBUILD_KOTLIN_EXTENSIONS=OFF \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DBUILD_DOCS=ON 

ninja
ninja install

使用已经准备好的脚本

详见 ffmpeg 静态编译 稍微添加点参数即可,如下:


php prepare.php  +opencv +coturn +privoxy +socat 

参考文档

  1. nginx http3 模块
  2. 静态编译 ffmpeg