Почему openssl/ssl.h не содержит ничего, кроме относительного пути?

Я собрал OpenSSL с помощью компилятора MSVC++ 2013 Express, выполнив следующие действия:

  • Установка ActivePerl 5.16.3 из здесь.
  • Возьмите openssl-1.0.1e.tar.gz и извлеките его в C:\OpenSSL\Win64.
  • Открытие «Командной строки VS2013 x64 Cross Tools» и cd-в каталог, в который я распаковал архив.
  • Выполнение следующих команд:

    perl Configure VC-WIN64A
    ms\do_win64a
    nmake -f ms\ntdll.mak

Это завершилось без ошибок (правильные библиотеки DLL построены). Однако произошло нечто очень странное. Если я открою openssl/ssl.h, содержимое файла будет таким:

../../ssl/ssl.h

Поскольку это явно недопустимый C/C++, я не могу скомпилировать приложения, зависящие от заголовков OpenSSL, из-за описанной выше проблемы. Что я сделал не так?


person Nathan Osman    schedule 31.12.2013    source источник
comment
ПРЕДПОЛОЖЕНИЕ: Этот файл почти наверняка должен быть символической ссылкой - либо он был неправильно извлечен из архива, либо скрипт сборки каким-то образом создал его как обычный файл вместо ссылки.   -  person    schedule 31.12.2013
comment
@duskwuff: Кажется, эти файлы упакованы вот так. Загляните в связанный архив ... - так что я бы согласился на ваше предложение об этом-должно быть-ссылками.   -  person alk    schedule 31.12.2013
comment
Какой инструмент вы используете для извлечения архива?   -  person    schedule 31.12.2013
comment
@duskwuff: я использую 7-Zip.   -  person Nathan Osman    schedule 31.12.2013


Ответы (2)


duskwuff комментарий действительно был правильным. Проблема заключалась в том, что 7-Zip неправильно распаковывал символические ссылки в архиве. Решение состояло в том, чтобы загрузить утилиту командной строки GnuWin32 tar и использовать ее для извлечения архив:

tar -xvf openssl-1.0.1e.tar.gz
person Nathan Osman    schedule 01.01.2014

Это касается не только openssl/ssl.h. Это касается почти всех файлов, которые я видел.

Я предполагаю, что эта информация используется при сборке OpenSSL для создания включаемых файлов в папку include, которую вы упомянули в make-файлах (для Windows это nt.mak или ntdll.mak).

Если вы создадите или создадите библиотеку, вы увидите в журнале, что файлы заголовков копируются в папку, указанную в makefile, и там вы найдете файлы заголовков, которые будут выглядеть как действительные файлы заголовков C. На самом деле вы используете эти сгенерированные файлы заголовков, а не эти файлы заголовков.

Похоже на шаблон для генерации заголовочных файлов.

person doptimusprime    schedule 31.12.2013