跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Linux 新手求教一个编译 nginx 的问题
未分類
6 12 月 2020

Linux 新手求教一个编译 nginx 的问题

Linux 新手求教一个编译 nginx 的问题

資深大佬 : daijinming 2

我想在一台树莓派上编译 nginx,在执行 ./Configure 的时候发现 linux 缺少 openssl 、pcre 、zlib 等库,无法编译通过,采用 apt install 也没能安装上这些组件,非常无助。我主要不理解这个编译的过程,有几个问题想求教下:1 、openssl 、pcre 、zlib 这些组件如何可以安装到 linux 下, 他们是以什么形式存在于 linux 的那个目录下 2 、我看网上也有采用下载 openssl 、pcre 、zlib 源码的方式,在编译 nginx 的时候指定源码目录,这种方式和安装二进制的组件有什么异同 3 、nginx 编译后,是不是 这些组件也会编译进二进制程序中??不吝赐教

大佬有話說 (31)

  • 資深大佬 : 37Y37

    直接 apt 安装即可,会自动安装所有依赖

  • 資深大佬 : bleepbloop

    试一下是不是叫 openssl-dev 、pcre-dev 、zlib-dev 。。。。
    另外 g++、make 、autoconf 之类应该也得装,不过树莓派可能自带

  • 資深大佬 : bleepbloop

    或者 libopenssl 、libpcre 、libzlib 或者 libopenssl-dev 、libpcre-dev 、libzlib-dev

  • 資深大佬 : ztechstack

    zlib1g openssl libpcre3

  • 資深大佬 : ztechstack

    @ztechstack 回复错了,这个是直接安装 nginx 的依赖包,包名。

  • 資深大佬 : jimrok

    因为 nginx 用的是静态编译,直接将这些代码编译进 nginx 里,不再依赖系统的库,这样保证进程的稳定性

  • 資深大佬 : mingl0280

    树莓派不知道你用的啥系统,但是如果是 Debian 系极端不建议编译安装。debian 系就好好去用 apt install nginx

  • 資深大佬 : fanlis

    编译安装 nginx 的时候,一般都是缺少哪个依赖,就单独去下载编译具体的依赖。确保在环境里面有依赖就行

    这种直接搜索离线安装 nginx 就行,资料还挺多的

  • 主 資深大佬 : daijinming

    @fanlis 追问下朋友,比如我下载了 PCRE 的源码,是不是我要把 PCRE 编译成 .so 放到 lib64 就行??

  • 資深大佬 : aflow

    只是想安装使用的话,用 docker 安装,方便快捷

  • 資深大佬 : smilzman

    ./configure –help 看一下,可以直接指定源码路径
    ————————–
    –with-openssl=DIR
    –with-pcre=DIR
    –with-zlib=DIR

    DIR 是 openssl 等源码的路径~

  • 資深大佬 : fanlis

    @daijinming
    @smilzman
    #11 这样指定就行,其它的依赖直接
    make
    make install 就行,
    具体要看具体的依赖的安装位置,很多依赖的 install 默认路径本来就是 gcc 的环境中

  • 資深大佬 : Mecool

    如果是 deb 系包管理工具,那就 apt install build-essential libpcre3 libpcre3-dev openssl libssl-dev 安装依赖

  • 資深大佬 : love

    哪个 linux 没有带 nginx 包?
    即使你要改一下编译参数,那也可以看一下此 linux 原始包编译脚本看看依赖什么库

  • 資深大佬 : diaryevil

    说的简单点:
    1. openssl,pcre 等组件(我一般把它们叫库),通过 apt-get install 获取的一般是“可执行的二进制+库文件”(有的可能连二进制都没有,有的 dev 库还会带各种头文件),比如 openssl,install 后你就可以使用 openssl 命令行了(可执行的命令行就是可执行二进制文件);存放位置常见的是 /usr/bin (二进制),/lib/(库文件)等等

    2. 编译不需要可执行二进制文件,主要是要组件库,比方说 nginx 的 SSL 功能就需要 openssl 组件库,编译后这个库就会被编进去。所以下载组件源码后–>编译组件–>获得组件库–>编译 nginx 时候将组件库路径指定好(或者放在默认的 PATH 下)–>编译 nginx 就把组件带进去了,这是静态编译,动态编译会稍微有些不同

    3. 当然,你要是采用动态编译的方式,你自己了解之后自行定夺,就像 6L 说的,静态编译不再依赖系统的库,动态编译放弃了这方面的稳定性换来一定程度上的自主性。

  • 資深大佬 : diaryevil

    @diaryevil 如果有说的不对的也望各位不吝赐教

  • 資深大佬 : gstqc

    更正 jimrok 的说法
    dev 或 devel 的包并不提供源码,只有头文件
    只是告诉编译器,系统的这些动态链接库有哪些变量、函数等等

    静态编译依赖库需要下载包的源码并在编译过程中编译这些库并静态链接进 nginx 的二进制文件

  • 資深大佬 : cmostuor

    @fanlis 不建议 make install 这样安装 不好管理

  • 資深大佬 : creanme

    别编译了,以前我不懂,照着 csdn 上面写的编译 nginx,在云服务器上编译了一个多小时都没编译好,而且服务器直接给我限制了 cpu 频率。

  • 資深大佬 : vincenttone

    是因为你编译 nginx 需要依赖这些库,所以你需要编译这些库,也就是自己下对应的源码再编译一下,路径的话默认路径就可以了。
    还可以直接使用对应的软件管理器安装,具体看你的 linux 发行版( debian 的 apt 、centos 的 yum 、arch 的 pacman 等),可以使用对应的命令 search 一下 dev 包,比如 openssl-dev 之类的,不同的包管理器名字不一样,安装完编译就可以了。
    也可以干脆直接使用包管理器安装 nginx,不一定需要自行编译,还要考虑依赖。自己编译可能为了更好的掌控或者研究源码,不然胡乱./configure 你自己都不知道你在做什么。
    实在要自己编译,最好有点 c 语言和操作系统知识。

  • 資深大佬 : shlabc

    mkdir -p /usr/local/src/pcre && cd /usr/local/src/pcre
    chmod -R 777 /usr/local/src

    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
    tar zvxf pcre-8.41.tar.gz
    cd pcre-8.41
    ll

    ./configure –prefix=/usr/local/ins/pcre-8.41

    make && make install

    ln -s /usr/local/ins/pcre-8.41 /usr/local/pcre
    ————————————————————–
    以上,是我在 centos6.10 下编译 nginx 依赖的一个例子,原理,上面的都说完了

    zlib-1.2.11.tar.gz
    openssl-1.1.0g.tar.gz

  • 資深大佬 : gstqc

    @shlabc chmod -R 777 的勇士
    这样干不会被开除吗

  • 資深大佬 : shlabc

    @gstqc
    仅供参考,没想手把手一点点教学,是我的疏忽。
    这是我从虚拟机实验脚本里摘出来的。后面有删除或变更权限步骤,有检查脚本及步骤。

  • 資深大佬 : julyclyde

    @shlabc 不是手把手的问题,而是根本就是错的内容的问题

  • 資深大佬 : huangmingyou

    1. 确保 /etc/apt/sources.list 里面有 deb-src 开头的源设置
    2. sudo apt build-dep nginx

    就会把编译 nginx 需要的所有依赖文件都安装好。

  • 資深大佬 : huangmingyou

    [email protected]:/home/hmy# apt build-dep nginx
    正在读取软件包列表… 完成
    正在读取软件包列表… 完成
    正在分析软件包的依赖关系树
    正在读取状态信息… 完成
    下列 [新] 软件包将被安装:
    dh-systemd libluajit-5.1-dev libmhash-dev libpam0g-dev libperl-dev
    升级了 0 个软件包,新安装了 5 个软件包,要卸载 0 个软件包,有 10 个软件包未被升级。
    需要下载 2,566 kB/2,993 kB 的归档。
    解压缩后会消耗 16.6 MB 的额外空间。
    您希望继续执行吗? [Y/n]

  • 主 資深大佬 : daijinming

    @Mecool 你给的这个命令不错,不过还差 zlib 找不到

  • 主 資深大佬 : daijinming

    @diaryevil 感谢分享

  • 資深大佬 : yklaxds

    你这种需求试试 Gentoo… 如果不是非要 Linux,freebsd 也是可以的

  • 資深大佬 : buffzty

    nginx 依赖那些是依赖他们的静态库或者动态库. 你用 apt install libxxx-dev 就能下载到, .so 和.a 会安装到 /usr/lib 目录
    .h 头文件会安装到 /usr/include 目录. 这 2 个目录默认是在库搜索目录和头文件搜索目录里的,所以你不必指定库的目录. 如果你自己下载源码编译那么就要告诉系统去哪里找库文件(.so .a). 两者没有什么区别. 唯一的区别就是 apt 安装的库版本可能不是最新的, 你自己安装的可以是最新的.

  • 主 資深大佬 : daijinming

    @buffzty 感谢分享

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具