首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MAC OS X上编译Httrack

在MAC OS X上编译Httrack
EN

Stack Overflow用户
提问于 2015-12-17 03:20:14
回答 4查看 4.1K关注 0票数 5

我正在尝试在我的MAC上编译httrack。./configure成功。但是在编译包的时候,我得到了下面的错误,并且不能解决它。

代码语言:javascript
复制
In file included from htscore.c:40:
In file included from ./htscore.h:81:
In file included from ./htslib.h:67:
./htsbasenet.h:76:10: fatal error: 'openssl/ssl.h' file not found
#include <openssl/ssl.h>
      ^
2 warnings and 1 error generated.
make[2]: *** [libhttrack_la-htscore.lo] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

我也尝试了这个解决方案,但没有成功https://serverfault.com/questions/283271/how-to-get-httrack-to-work-with-ssl-on-mac-os-x-libssl-so-not-found

Openssl位于/usr/include/openssl

EN

回答 4

Stack Overflow用户

发布于 2016-05-01 18:19:58

如果你可以没有HTTPS,那么

代码语言:javascript
复制
./configure --enable-https=no

应该足够了。

票数 6
EN

Stack Overflow用户

发布于 2015-12-17 04:46:03

如果您想安装非苹果软件包,并安装一个包管理器,比如homebrew,这只需从homebrew website复制并粘贴一行即可。

然后,您可以使用以下命令找到所需的任何包:

代码语言:javascript
复制
brew search httrack

并安装它们并使用

代码语言:javascript
复制
brew install httrack

并使用以下命令删除它们

代码语言:javascript
复制
brew rm httrack

更新所有已安装的软件包。

代码语言:javascript
复制
brew update && brew upgrade --all && brew cleanup
票数 3
EN

Stack Overflow用户

发布于 2015-12-17 16:04:25

听起来你在path上没有OpenSSL,或者Httrack没有接收到它。Httrack似乎也没有指定OpenSSL目录的configure选项。

它似乎也拒绝任何低于OpenSSL 1.0.1g (心血)的东西。默认情况下,OS X提供OpenSSL 0.9.8,因此您应该对最新版本的OpenSSL执行downloadinstall操作。

拥有更新版本的OpenSSL后,通过CFLAGSLDFLAGS导出所需的路径。Httrack自己接过了LDLIBS

代码语言:javascript
复制
$ export CFLAGS="-I/usr/local/ssl/macosx-x64/include"
$ export LDFLAGS="-L/usr/local/ssl/macosx-x64/lib"

$ ./configure 
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
...
config.status: executing depfiles commands
config.status: executing libtool commands

$ cat ./config.log | grep -i openssl
| #define HTS_USEOPENSSL 1
| #define HTS_USEOPENSSL 1
OPENSSL_LIBS='-lcrypto -lssl'
#define HTS_USEOPENSSL 1

以上内容来自OS X 10.8.5和Htrack 3.48.21

您可以验证OpenSSL是否与以下各项链接:

代码语言:javascript
复制
$ find . -name *.dylib
./libtest/.libs/libbaselinks.dylib
...
./src/.libs/libhtsjava.dylib
./src/.libs/libhttrack.dylib

然后:

代码语言:javascript
复制
$ otool -L ./src/.libs/libhttrack.dylib | grep -i ssl
    /usr/local/ssl/macosx-x64/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/ssl/macosx-x64/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)

在使用make check安装之前,您应该能够测试构建

代码语言:javascript
复制
$ make
...

$ make check
...
PASS: 00_runnable.test
PASS: 01_engine-charset.test
PASS: 01_engine-entities.test
md5 selftest succeeded
hashtable summary: size=262144 (lg2=18) used=72619 stash-size=0 pool-size=6693195 pool-capacity=8388608 pool-used=6480537 writes=6600000 (new=175000) moved=44471 stashed=4 max-stash-size=1 avg-moved=0.25412 rehash=14 pool-compact=15 pool-realloc=30 memory=14680688
all hashtable tests were successful!
PASS: 01_engine-hashtable.test
PASS: 01_engine-idna.test
PASS: 01_engine-simplify.test
online tests are disabled
skipping online unit tests
SKIP: 10_crawl-simple.test
online tests are disabled
skipping online unit tests
SKIP: 11_crawl-cookies.test
online tests are disabled
skipping online unit tests
SKIP: 11_crawl-idna.test
online tests are disabled
skipping online unit tests
SKIP: 11_crawl-international.test
online tests are disabled
skipping online unit tests
SKIP: 11_crawl-longurl.test
online tests are disabled
skipping online unit tests
SKIP: 11_crawl-parsing.test
online tests are disabled
skipping online unit tests
SKIP: 12_crawl_https.test
======================
All 6 tests passed
(7 tests were not run)
======================
make[2]: Leaving directory '/Users/.../httrack-3.48.21/tests'
make[1]: Leaving directory '/Users/.../httrack-3.48.21/tests'
make[1]: Entering directory '/Users/.../httrack-3.48.21'
make[1]: Nothing to be done for 'check-am'.
make[1]: Leaving directory '/Users/.../httrack-3.48.21'

我不知道为什么没有执行在线测试,因为它们是默认启用的:

代码语言:javascript
复制
$ ./configure --help | grep -i online
    --enable-online-unit-tests=[yes/no/auto]
                                    Enable online-unit-tests [default=yes]

另请参阅Issue 92: 'make check' and "uname: illegal option -- o" on OS X

他们对OpenSSL的使用看起来还有改进的空间……您可以考虑打开src/htslib.c,向下滚动到第5166行:

代码语言:javascript
复制
// OpenSSL_add_all_algorithms();
openssl_ctx = SSL_CTX_new(SSLv23_client_method());
if (!openssl_ctx) {
  fprintf(stderr,
          "fatal: unable to initialize TLS: SSL_CTX_new(SSLv23_client_method)\n");
  abortLog("unable to initialize TLS: SSL_CTX_new(SSLv23_client_method)");
  assertf("unable to initialize TLS" == NULL);
}

并将其更改为类似以下内容:

代码语言:javascript
复制
// OpenSSL_add_all_algorithms();
openssl_ctx = SSL_CTX_new(SSLv23_client_method());
if (!openssl_ctx) {
  fprintf(stderr, "fatal: unable to initialize TLS: SSL_CTX_new(SSLv23_client_method)\n");
  abortLog("unable to initialize TLS: SSL_CTX_new(SSLv23_client_method)");
  assertf("unable to initialize TLS" == NULL);
}

const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(openssl_ctx, flags);

const char PREFERRED_CIPHERS[] = "HIGH:!aNULL:!kRSA:!PSK:!SRP:!MD5:!RC4";
long res = SSL_CTX_set_cipher_list(openssl_ctx, PREFERRED_CIPHERS);
if (res != 1) {
  fprintf(stderr, "fatal: unable to initialize TLS: SSL_CTX_set_cipher_list(PREFERRED_CIPHERS)\n");
  abortLog("unable to initialize TLS: SSL_CTX_set_cipher_list(PREFERRED_CIPHERS)");
  assertf("unable to initialize TLS" == NULL);
}

你还可以做一些其他的事情。请参阅OpenSSL维基上的SSL/TLS Client

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34320330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档