在MAC OS X上编译Httrack

6

我正在尝试在我的MAC上编译httrack。./configure命令成功执行。但是在编译软件包时,我遇到了以下错误,而且无法解决它。

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。

5个回答

7

如果您可以不使用HTTPS,则

./configure --enable-https=no

应该足够了。


4

看起来你没有安装 OpenSSL 或 Httrack 无法找到它。此外,Httrack似乎没有“configure”选项来指定 OpenSSL 目录。

另外,Httrack 拒绝任何低于 OpenSSL 1.0.1g(Heartbleed)的版本。OS X 默认提供 OpenSSL 0.9.8,所以你应该下载安装最新版本的 OpenSSL。

一旦你拥有更新版本的 OpenSSL,通过CFLAGSLDFLAGS导出所需的路径。Httrack会自动识别LDLIBS

$ 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是否已链接:

$ find . -name *.dylib
./libtest/.libs/libbaselinks.dylib
...
./src/.libs/libhtsjava.dylib
./src/.libs/libhttrack.dylib

然后:

$ 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进行构建测试:

$ 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'

我不知道为什么在线测试没有被执行,因为它们默认是启用的。
$ ./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行:
// 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);
}

并将它更改为类似于:

// 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客户端


3

如果你想安装非苹果的软件包,建议你安装一个软件包管理器,例如homebrew。你只需从homebrew网站复制并粘贴一行代码即可。

然后你就可以使用以下命令找到任何你想要的软件包:

brew search httrack

安装它们并使用构建工具构建

brew install httrack

并用

删除它们。

brew rm httrack

使用以下命令更新所有已安装的软件包:

brew update && brew upgrade --all && brew cleanup

如何打开它?它在应用程序中不可用。 - RN Kushwaha
2
它将位于/usr/local/bin,因此在终端中,您将键入/usr/local/bin/httrack来启动它,或者更好的方法是编辑您的PATH以包括/usr/local/bin,然后您只需要键入httrack即可。 - Mark Setchell

0

@jww 答案 帮助我理解了问题,但是你可以使用 brew 版本的 openssl,而不是手动下载。

  1. 安装它:

    brew install openssl@1.1
    
  2. 运行 brew info openssl@1.1,你应该会看到类似这样的内容:

    $ brew info openssl@1.1
    
    ...
    为了让编译器找到 openssl@1.1,您可能需要设置:
      export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
      export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
    ...
    
  3. 在运行 configure 前,您需要这两个带有 CPPFLAGSLDFLAGSexport 行 - 路径可能因基于 Intel/ARM 处理器而异。运行它们:

    export LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib"
    export CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include"
    ./configure --prefix=$HOME/usr && make -j8 && make install
    

0

你可以使用Homebrew软件包管理器在Mac上安装httrack。按照以下步骤运行并克隆任何网站。

  1. 打开终端。

  2. 在终端中键入以下命令:

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null

  3. 键入此命令

    brew install httrack

httrack将会下载到此文件夹“/usr/local/Cellar/httrack/”中

  1. 下载完成后,在终端中输入以下命令:

    cd /

    cd /usr/local/Cellar/httrack/3.49.2_1/bin

  2. 输入 httrack 并按回车键(它将在终端中打开 httrack 应用程序)

  3. 输入您的项目名称并点击回车键

  4. 输入您想要保存文件的基本路径并点击回车键

  5. 输入您想要克隆的网站 URL 并点击回车键

  6. 输入与“镜像网站”相关的数字,并填写所有选项

  7. 输入“Y”以准备启动镜像,并点击回车键


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接