" openssl / ssl.h:没有这样的文件或目录"在安装Git期间

时间:2013-07-29 02:12:23

标签: git

尝试根据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。任何建议。

7 个答案:

答案 0 :(得分:16)

这个答案对我来说很合适

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

只做sudo apt-get install libssl-dev

答案 1 :(得分:7)

对于RHEL和CentOS系统等RHEL衍生物,安装将解决此问题。

$ yum install -y openssl-devel

答案 2 :(得分:2)

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

换句话说,如果源代码没有开箱即用,你可能会遇到一个潜在的庞大而复杂的依赖追逐迷宫,其中可能包括修复平台的可移植性错误。

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

此外:

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

答案 3 :(得分:1)

以下使用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

答案 4 :(得分:0)

如果您无法访问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 :(得分:0)

对于 ubuntu ,我安装了 openssl libssl-dev

  

sudo apt install openssl libssl-dev

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

您可以在系统上找到它,并可以使用--with-openssl

运行configure

例如如果您在/usr/include/openssl/ssl.h中找到ssl.h,则可以在命令下运行

  

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

答案 6 :(得分:-1)

半个答案(覆盖apt,而不是yum):

如果您将--print-uris添加到apt-get命令,它会告诉您需要哪些文件以及可以下载哪些文件,那么您可以获取这些文件并dpkg -i。或者将它们放在/var/cache/apt/archives中并运行apt-get(不使用--print-uris),它会在缓存中找到它们而不是尝试下载它们。