我试图理解制作问题,而且我不确定发生了什么。我不确定我是否遇到过make或者问题git的问题。
如果我执行:
$ git clone git://git.openssl.org/openssl.git openssl-git
然后我得到了似乎是OpenSSL的源文件:
$ cd openssl-git
$ ls
ACKNOWLEDGMENTS INSTALL.VMS README demos os2
CHANGES INSTALL.W32 README.ASN1 doc perl
CHANGES.SSLeay INSTALL.W64 README.ECC e_os.h shlib
Configure INSTALL.WCE README.ENGINE e_os2.h ssl
...
当我下载OpenSSL tarball并解压缩时,这些文件看起来与正好。
这些文件是否可用?我不允许对他们执行make
吗?
我提出这样一个简单问题的原因是:我打开Configure
,修改其中一个配置行,然后执行clean,configure和make。随后失败。当我问起这件事时,我告诉我没有正确使用git。
以下是有人告诉我make是可以的,而且我使用git不正确(来自OpenSSL Testing邮件列表):openssl-dev, link error [heartbeat_test] Error 2。
以下是有人告诉我,我使用git不正确(来自Stack Overflow):Why does deleting a conflicted file break a project?。
注意:我在两个问题中都遇到了同样的问题,除了这个问题使用了新的克隆。
# Standard checkout
git clone git://git.openssl.org/openssl.git openssl-git
cd openssl-git
# This is a false start. A config is needed to create a Makefile
export KERNEL_BITS=64
./config
# Clean up developer checked-in cruft
make clean && make dclean
# Open Configure, find debug-darwin64-x86_64-cc, change -g2 to -g3
./Configure debug-darwin64-x86_64-cc no-ssl2 enable-ec_nistp_64_gcc_128
make depend
make
...
duplicate symbol _main in:
heartbeat_test.o
testutil.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [link_app.] Error 1
make[1]: *** [heartbeat_test] Error 2
make: *** [build_tests] Error 1
我也可以使用相同的结果将./Configure debug-darwin64-x86_64-cc no-ssl2 enable-ec_nistp_64_gcc_128
更改为./config no-ssl2 enable-ec_nistp_64_gcc_128
。 export KERNEL_BITS=64
确保我获得64位Darwin配置(darwin64-x86_64-cc
)。
答案 0 :(得分:1)
您应该可以使用该克隆执行make
。
但请注意,INSTALL
建议直接使用./config
而不是Configure
。
您可以修改Configure
,但之后应该./config
,而不是./Configure
(除非您想手动为操作系统配置OpenSSL)。
答案 1 :(得分:1)
你是对的,问题不在于你使用Git,而是因为OpenSSL Makefiles。问题是make dclean
删除了所需的文件。运行make dclean
后,git status
会直接显示test/
目录中的某些C文件已被删除。删除这些文件后,将其恢复足以使其正常工作:
git checkout -- 'test/*.c'
让人们失望的是你正在以通常不建议使用Git的方式使用Git(但实际上可能是常用的),以及容易导致非常类似问题的方式。就像你在这里的评论中所做的那样,向他人展示问题不在于Git的简单方法是以不依赖于任何可疑的Git命令的方式解释真正的问题。在您的问题中,您已经显示了导致错误消息的确切命令,可以在git clone
之后直接运行而无需任何进一步的用户输入。我怀疑如果你在那里做了同样的事情,你会得到更多有用的答案。