×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

请教: 编译apache时,如何让编译出来的httpd只从特定的一个目录调用所有的动态库?

本文发表在 rolia.net 枫下论坛公司一个软件x中包含一个已经编译好了的apache,x安装后apache作为webserver来提供操作界面操作软件.
大家知道apache的httpd运行时会调用一些动态库,也就是依赖一些库,而且位置都不同:
bash-2.05# ldd /usr/local/x/apache/bin/httpd
libaprutil-0.so.0 => /usr/local/x/apache/lib/libaprutil-0.so.0
libexpat.so.0 => /usr/local/lib/libexpat.so.0
libiconv.so.2 => /usr/local/lib/libiconv.so.2
libapr-0.so.0 => /usr/local/x/apache/lib/libapr-0.so.0
libsendfile.so.1 => /usr/lib/libsendfile.so.1
librt.so.1 => /usr/lib/librt.so.1
libm.so.1 => /usr/lib/libm.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
libnsl.so.1 => /usr/lib/libnsl.so.1
libresolv.so.2 => /usr/lib/libresolv.so.2
libpthread.so.1 => /usr/lib/libpthread.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libc.so.1 => /usr/lib/libc.so.1
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1
libaio.so.1 => /usr/lib/libaio.so.1
libmd5.so.1 => /usr/lib/libmd5.so.1
libmp.so.2 => /usr/lib/libmp.so.2
libthread.so.1 => /usr/lib/libthread.so.1
/usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
/usr/platform/SUNW,Ultra-5_10/lib/libmd5_psr.so.1
bash-2.05#

编译apache时指定安装目录/usr/local/x则可以将生成的专用库(如libaprutil-0.so.0)生成到此目录,但是一些通用的库就不行了.比如/usr/local/lib/libiconv.so.2,原来就有了.

现在的问题是:软件打包时并没有把所有的库都打包进去, 如果客户的系统上缺少这些通用库,apache就跑不起来了.

请教有经验的大虾:有什么好的办法? 如果把所有库都打包进去,安装是判断冲突的工作量就大多了,也麻烦.更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 专业技术讨论 / 请教: 编译apache时,如何让编译出来的httpd只从特定的一个目录调用所有的动态库?
    本文发表在 rolia.net 枫下论坛公司一个软件x中包含一个已经编译好了的apache,x安装后apache作为webserver来提供操作界面操作软件.
    大家知道apache的httpd运行时会调用一些动态库,也就是依赖一些库,而且位置都不同:
    bash-2.05# ldd /usr/local/x/apache/bin/httpd
    libaprutil-0.so.0 => /usr/local/x/apache/lib/libaprutil-0.so.0
    libexpat.so.0 => /usr/local/lib/libexpat.so.0
    libiconv.so.2 => /usr/local/lib/libiconv.so.2
    libapr-0.so.0 => /usr/local/x/apache/lib/libapr-0.so.0
    libsendfile.so.1 => /usr/lib/libsendfile.so.1
    librt.so.1 => /usr/lib/librt.so.1
    libm.so.1 => /usr/lib/libm.so.1
    libsocket.so.1 => /usr/lib/libsocket.so.1
    libnsl.so.1 => /usr/lib/libnsl.so.1
    libresolv.so.2 => /usr/lib/libresolv.so.2
    libpthread.so.1 => /usr/lib/libpthread.so.1
    libdl.so.1 => /usr/lib/libdl.so.1
    libc.so.1 => /usr/lib/libc.so.1
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1
    libaio.so.1 => /usr/lib/libaio.so.1
    libmd5.so.1 => /usr/lib/libmd5.so.1
    libmp.so.2 => /usr/lib/libmp.so.2
    libthread.so.1 => /usr/lib/libthread.so.1
    /usr/platform/SUNW,Ultra-5_10/lib/libc_psr.so.1
    /usr/platform/SUNW,Ultra-5_10/lib/libmd5_psr.so.1
    bash-2.05#

    编译apache时指定安装目录/usr/local/x则可以将生成的专用库(如libaprutil-0.so.0)生成到此目录,但是一些通用的库就不行了.比如/usr/local/lib/libiconv.so.2,原来就有了.

    现在的问题是:软件打包时并没有把所有的库都打包进去, 如果客户的系统上缺少这些通用库,apache就跑不起来了.

    请教有经验的大虾:有什么好的办法? 如果把所有库都打包进去,安装是判断冲突的工作量就大多了,也麻烦.更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • 纠错加补充:
      改:

      "请教有经验的大虾:有什么好的办法? 如果把所有库都打包进去,安装是判断冲突的工作量就大多了,也麻烦"

      为:

      请教有经验的大虾:有什么好的办法? 如果把所有库都打包进去,安装时判断冲突的工作量就大多了,也麻烦.如果把需要的库全copy到一个目录下,而httpd只从这个目录找库,那么就省事多了.