ffmpeg增加了硬件编解码之后,需要cuda 的库,经过逐个尝试,结果是需要以下三个库:
-lnppig -lnppicc -lnppc
在编译ffmpeg的时候加入了编译选项和头文件目录,编译通过。但是编译nginx的时候,提示找不到这三个库。
1、简单的方法就是每次编译的时候执行下export LD_LIBRARY_PATH=path-to-your-lib 然后就可以了,
缺点就是每开一个新的shell都需要执行这个命令
2、接着就查看nginx的configure 过程, auto/make 文件中
cat << END >> $NGX_MAKEFILE
build: binary modules manpage
binary: $NGX_OBJS${ngx_dirsep}$NGX_BIN_FULL_NAME
$NGX_OBJS${ngx_dirsep}$NGX_BIN_FULL_NAME: $ngx_deps$ngx_spacer
\$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}$NGX_BIN_FULL_NAME$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
$ngx_rcc
$ngx_long_end
modules:
END
依次查看ngx_libs和ngx_link的结果,ngx_link是空的,ngx_libs有值,然后接着找ngx_libs,发现:
ngx_libs= if test -n "$NGX_LD_OPT$CORE_LIBS"; then ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS | sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"` fi
ngx_libs是由NGX_LD_OPT和CORE_LIBS组成的,然后接着找这两个变量发现:
--with-cc=*) CC="$value" ;; --with-cpp=*) CPP="$value" ;; --with-cc-opt=*) NGX_CC_OPT="$value" ;; --with-ld-opt=*) NGX_LD_OPT="$value" ;; --with-cpu-opt=*) CPU="$value" ;; --with-debug) NGX_DEBUG=YES ;;
NGX_LD_OPT是由--withld-opt参数传进来的。
而CORE_LIBS是由auto/module里面遍历所有模块,寻找所有的ngx_module_libs,代码如下所示:
1 if [ "$ngx_module_link" = DYNAMIC ]; then 2 3 for ngx_module in $ngx_module_name; do 4 # extract the first name 5 break 6 done 7 8 DYNAMIC_MODULES="$DYNAMIC_MODULES $ngx_module" 9 eval ${ngx_module}_SRCS=\"$ngx_module_srcs\" 10 11 eval ${ngx_module}_MODULES=\"$ngx_module_name\" 12 13 if [ -z "$ngx_module_order" -a 14 \( "$ngx_module_type" = "HTTP_FILTER" 15 -o "$ngx_module_type" = "HTTP_AUX_FILTER" \) ] 16 then 17 eval ${ngx_module}_ORDER=\"$ngx_module_name \ 18 ngx_http_copy_filter_module\" 19 else 20 eval ${ngx_module}_ORDER=\"$ngx_module_order\" 21 fi 22 23 if test -n "$ngx_module_incs"; then 24 CORE_INCS="$CORE_INCS $ngx_module_incs" 25 fi 26 27 if test -n "$ngx_module_deps"; then 28 NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps" 29 fi 30 31 libs= 32 for lib in $ngx_module_libs 33 do 34 case $lib in 35 36 LIBXSLT | LIBGD | GEOIP | PERL) 37 libs="$libs \$NGX_LIB_$lib" 38 39 if eval [ "\$USE_${lib}" = NO ] ; then 40 eval USE_${lib}=DYNAMIC 41 fi 42 ;; 43 44 PCRE | OPENSSL | ZLIB) 45 eval USE_${lib}=YES 46 ;; 47 48 MD5 | SHA1) 49 # obsolete 50 ;; 51 52 *) 53 libs="$libs $lib" 54 ;; 55 56 esac 57 done 58 eval ${ngx_module}_LIBS=\‘$libs\‘ 59 60 elif [ "$ngx_module_link" = YES ]; then 61 62 eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \ 63 $ngx_module_name\" 64 65 eval ${ngx_var}_SRCS=\"\$${ngx_var}_SRCS $ngx_module_srcs\" 66 67 if test -n "$ngx_module_incs"; then 68 eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\" 69 fi 70 71 if test -n "$ngx_module_deps"; then 72 eval ${ngx_var}_DEPS=\"\$${ngx_var}_DEPS $ngx_module_deps\" 73 fi 74 75 for lib in $ngx_module_libs 76 do 77 case $lib in 78 79 PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) 80 eval USE_${lib}=YES 81 ;; 82 83 MD5 | SHA1) 84 # obsolete 85 ;; 86 87 *) 88 CORE_LIBS="$CORE_LIBS $lib" 89 ;; 90 91 esac 92 done 93 94 elif [ "$ngx_module_link" = ADDON ]; then 95 96 eval ${ngx_module_type}_MODULES=\"\$${ngx_module_type}_MODULES \ 97 $ngx_module_name\" 98 99 NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_module_srcs" 100 101 if test -n "$ngx_module_incs"; then 102 eval ${ngx_var}_INCS=\"\$${ngx_var}_INCS $ngx_module_incs\" 103 fi 104 105 if test -n "$ngx_module_deps"; then 106 NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_module_deps" 107 fi 108 109 for lib in $ngx_module_libs 110 do 111 case $lib in 112 113 PCRE | OPENSSL | ZLIB | LIBXSLT | LIBGD | PERL | GEOIP) 114 eval USE_${lib}=YES 115 ;; 116 117 MD5 | SHA1) 118 # obsolete 119 ;; 120 121 *) 122 CORE_LIBS="$CORE_LIBS $lib" 123 ;; 124 125 esac 126 done 127 fi
所以,使用一劳永逸的方法就是哪个模块需要什么库的话,就直接在模块的config文件ngx_module_libs配置中加入所依赖的库。
其实在./configure参数--withld-opt里面传入也是可以的。
原文:https://www.cnblogs.com/micoblog/p/13036392.html