【问题标题】:"openssl/ssl.h: No such file or directory" during Installation of Git“openssl/ssl.h:没有这样的文件或目录”在安装 Git 期间
【发布时间】:2013-07-28 17:10:08
【问题描述】:

尝试根据Installing Git博客上的说明在Unix和Linux机器上安装git,但失败并出现以下错误

make prefix=/usr/local all
GIT_VERSION = 1.8.3.4
    * new build flags
    CC credential-store.o
In file included from cache.h:4,
                 from credential-store.c:1:
git-compat-util.h:221:25: warning: openssl/ssl.h: No such file or directory
git-compat-util.h:222:25: warning: openssl/err.h: No such file or directory
In file included from credential-store.c:1:
cache.h:11:21: warning: openssl/sha.h: No such file or directory
cache.h:19:18: warning: zlib.h: No such file or directory
In file included from credential-store.c:1:
cache.h:21: syntax error before "z_stream"
cache.h:21: warning: no semicolon at end of struct or union
cache.h:28: syntax error before '}' token
cache.h:28: warning: type defaults to `int' in declaration of `git_zstream'
cache.h:28: warning: data definition has no type or storage class
cache.h:30: syntax error before '*' token
cache.h:31: syntax error before '*' token
cache.h:32: syntax error before '*' token
cache.h:33: syntax error before '*' token
cache.h:35: syntax error before '*' token
cache.h:36: syntax error before '*' token
cache.h:37: syntax error before '*' token
cache.h:38: syntax error before '*' token
cache.h:39: syntax error before '*' token
cache.h:40: syntax error before '*' token
cache.h:41: syntax error before '*' token
cache.h:42: syntax error before '*' token
cache.h:769: syntax error before '*' token
make: *** [credential-store.o] Error 1

我知道这是因为缺少 openssl 库,但我无法获取这些库。

我的机器上没有 yum/apt-get 来按照建议运行以下命令:

$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev

如何在这些机器上获取这些库。这些机器无法访问互联网,如果需要,我可以做一个 scp。任何建议。

【问题讨论】:

  • 软件安装相关的问题更适合Super User。您还应该提供有关您的操作系统、包管理等的详细信息...
  • 如果您能告诉我们您的操作系统,我们或许可以为您指明 Git 的规范下载位置,无论是否受包管理。对于流行平台上的流行包,您几乎不需要自己编译任何东西(例如 Gentoo,其中在本地编译是包管理架构的一部分)。
  • 您可能希望在 make 之前运行 configure

标签: git


【解决方案1】:

这个答案对我来说很好

https://stackoverflow.com/a/3016986/5837509

只要sudo apt-get install libssl-dev

【讨论】:

  • 这对我来说是一个很好的线索,虽然对于 CYGWIN,它是:cyg-apt install openssl-devel
【解决方案2】:

对于像 CentOS 系统这样的 RHEL 和 RHEL 衍生产品,安装将解决这个问题。

$ yum install -y openssl-devel

【讨论】:

    【解决方案3】:

    对于 ubuntu,我安装了 openssllibssl-dev

    sudo apt install openssl libssl-dev

    检查配置文件代码后,我发现它正在预定义路径中搜索 "include/openssl/ssl.h"

    你可以在你的系统上找到它,并且可以使用 --with-openssl 运行配置

    例如如果你在 /usr/include/openssl/ssl.h 中找到了 ssl.h,那么你可以运行下面的命令

    ./configure --with-openssl=/usr/

    【讨论】:

      【解决方案4】:

      如果无法访问yum、apt-get等(比如在没有sudo访问的集群机器上),请在本地手动安装新版本的openssl,如下:

      获取源码,解压,进入目录,制作一个构建目录(非常很重要):

      wget https://www.openssl.org/source/openssl-1.0.2r.tar.gz
      tar -xvzf openssl-1.0.2r.tar.gz
      cd openssl-1.0.2r
      mkdir builddir
      

      配置到您的本地构建目标(确保它与您的源目录不同,不要只使用 /home/yourdir/openssl-1.0.2r/),制作并安装:

      ./config --prefix=/home/yourdir/openssl-1.0.2r/builddir --openssldir=/home/yourdir/openssl-1.0.2r/builddir
      make
      make install
      

      将构建目录中的 bin 和库路径添加到您的 shell 配置文件(即 ~/.bashrc)中的适当变量中,并获取它:

      export PATH=/home/yourdir/openssl-1.0.2r/builddir/bin:$PATH
      LD_LIBRARY_PATH="/your/other/dirs/libs:/home/yourdir/openssl-1.0.2r/builddir/lib:"
      source ~/.bashrc
      

      OpenSSL 现在应该默认位于您的新目录中:

      which openssl
      > /home/yourdir/openssl-1.0.2r/builddir/bin/openssl
      

      现在尝试重新安装 git,也许使用 make distclean。

      【讨论】:

        【解决方案5】:

        如果您无法访问所需库的预构建包,则必须采用包管理器之前的古老做法:在本地构建库、它们所依赖的库以及它们所依赖的库依赖,等等。

        换句话说,您可能会陷入巨大而复杂的依赖追逐迷宫,如果源代码不能开箱即用地编译,这可能包括为您的平台修复可移植性错误。

        Debian PTS 具有许多软件包的上游项目的链接,因此您可能无需猜测从“openssl 源”的 Google 搜索结果中选择哪个结果。参见例如http://packages.qa.debian.org/o/openssl.html(“浏览源代码”链接是一个好的开始;每个软件包的 Debian 版权文件也应该包含一个上游 URL,尽管它可能是历史的)。

        还有:

        如果您在本地有一个包管理器(在 Debian 上,那将是基本的dpkg),那么您可以避免查找和编译的麻烦,只需从连接 Internet 的主机复制所需的依赖包层次结构;但同样,请确保您获得完整的递归依赖项(您所依赖的包反过来依赖于递归的任何内容)。例如。 https://packages.debian.org/stable/openssl 显示openssl Debian 软件包依赖于哪些软件包;其中一些将拥有自己的类似依赖项列表。

        【讨论】:

          【解决方案6】:

          以下修复了用ssl编译python 3.8.1

             locate ssl.h
              /usr/include/openssl/ssl.h
          
             $ pwd
              /var/opt/python381/Python-3.8.1
              $ ln -s /usr/include/openssl
          

          结果

          ./configure
          
          ~~
          
          checking whether compiling and linking against OpenSSL works... yes
          checking for X509_VERIFY_PARAM_set1_host in libssl... yes
          

          【讨论】:

            【解决方案7】:

            自 2013 年(此页面上的问题年份)以来,请确保使用足够新的 curl 版本。

            在 Git 2.34(2021 年第四季度)中,围绕 libcURL 版本的条件编译已被理顺。

            请参阅commit 32da6e6commit e4ff3b6commit 905a028commit 2a7f646commit 7ce3dcdcommit 2d4032ccommit 59a399e(2021 年 9 月 13 日)和 commit e54e502commit 5b95244(11 月 11 日) by Ævar Arnfjörð Bjarmason (avar).
            (由 Junio C Hamano -- gitster --commit 8f79fb6 中合并,2021 年 9 月 23 日)

            http:不要硬编码CURL_SOCKOPT_OK 的值

            签字人:Ævar Arnfjörð Bjarmason

            如果我们使用的是没有它的旧 curl 版本,请使用新的 git-curl-compat.h 标头将 CURL_SOCKOPT_OK 定义为其已知值。
            它在http.c 中的a15d069 中硬编码(“@9​​87654346@:在 TCP 套接字上启用 keepalive”,2013 年 10 月 12 日,Git v1.8.5-rc0 -- merge)。

            【讨论】:

              猜你喜欢
              • 2018-10-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-08-04
              • 2013-04-06
              • 2018-02-15
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多