nginx编译增加依赖库

现象:

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_OPTCORE_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里面传入也是可以的。

posted @ 2020-06-03 11:25  yushimeng  阅读(918)  评论(0编辑  收藏  举报