Проблема с паром 2

Как я могу исправить эти проблемы OpenSSL/TLS, которые я получаю с Vapor 2? Они мешают мне компилировать мой проект в командной строке и в Xcode.

Во время сборки SPM:

note: you may be able to install ctls using your system-packager:

    brew install ctls

note: you may be able to install ctls using your system-packager:

    brew install openssl

При сбое сборки SPM:

Linking ./.build/debug/Run
ld: library not found for -lcrypto for architecture x86_64
<unknown>:0: error: link command failed with exit code 1 (use -v to see invocation)
<unknown>:0: error: build had 1 command failures
error: exit(1): /Library/Developer/Toolchains/swift-3.1-DEVELOPMENT-SNAPSHOT-2017-03-07-a.xctoolchain/usr/bin/swift-build-tool -f /Users/tanner/Desktop/PackageConfig/.build/debug.yaml

Также в SPM:

<module-includes>:1:9: note: in file included from <module-includes>:1:
#import "shim.h"
        ^
/Users/tanner/Desktop/PackageConfigTwo/.build/checkouts/ctls.git-9210868160426949823/shim.h:4:10: error: 'openssl/conf.h' file not found
#include <openssl/conf.h>
         ^
/Users/tanner/Desktop/PackageConfigTwo/.build/checkouts/crypto.git-7980259129511365902/Sources/Crypto/Cipher/Cipher+Method.swift:1:8: error: could not build Objective-C module 'CTLS'
import CTLS
       ^

В Xcode:

/Users/tanner/PackageConfig/.build/checkouts/ctls.git-9210868160426949823/shim.h:4:10: 'openssl/conf.h' file not found

/Users/tanner/PackageConfig/.build/checkouts/crypto.git-7980259129511365902/Sources/Crypto/Cipher/Cipher+Method.swift:1:8: Could not build Objective-C module 'CTLS'

ld: library not found for -lssl

Xcode Ошибка при проблемах с CTLS

Ответ 1

Эта ошибка означает, что OpenSSL либо не установлен, либо неправильно связан. Существует три решения этой проблемы.

Вариант 1: используйте панель инструментов Vapor (рекомендуется)

Установите последнюю версию панели инструментов Vapor.

Если вы уже установили панель инструментов, сначала попробуйте удалить ее:

which vapor
rm -rf /path/to/vapor

1.1 Установить (macOS)

Добавить паром Homebrew Tap

brew tap vapor/homebrew-tap

Обновите Homebrew и установите панель инструментов.

brew update
brew install vapor

1.2 Установить (Ubuntu)

Добавьте репозиторий APP APP.

Быстрый Script

eval "$(curl -sL https://apt.vapor.sh)"

Руководство

wget -q https://repo.vapor.codes/apt/keyring.gpg -O- | sudo apt-key add -
echo "deb https://repo.vapor.codes/apt $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/vapor.list

Установка

sudo apt-get update
sudo apt-get install vapor

1.3 Готово

Теперь у вас должен быть доступ к программе vapor, и все необходимые зависимости должны быть установлены.

vapor build
vapor xcode

swift build и соответствующие команды теперь также будут работать нормально.

swift build
swift package generate-xcodeproj

Вариант 2: установите пакет Vapor CTLS

2.1 Установить (macOS)

Добавить паром Homebrew Tap

brew tap vapor/homebrew-tap

Обновить Homebrew и установить CTLS

brew update
brew install ctls

Перезагрузите терминал, заново создайте проект Xcode (если используете Xcode) и повторите попытку.

2.2 Установить (Ubuntu)

Добавьте репозиторий APP APP.

Быстрый Script

eval "$(curl -sL https://apt.vapor.sh)"

Руководство

wget -q https://repo.vapor.codes/apt/keyring.gpg -O- | sudo apt-key add -
echo "deb https://repo.vapor.codes/apt $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/vapor.list

Обновить APT и установить CTLS.

sudo apt-get update
sudo apt-get install ctls

2.3 Выполнено

swift build и другие команды теперь должны работать нормально.

Вариант 3. Ручная установка и соединение OpenSSL или эквивалентного

3.1 Установка (macOS)

Установите OpenSSL (или любую другую подобную библиотеку SSL)

brew install openssl
brew install libressl

3.2 Установить (Ubuntu)

Установите OpenSSL (или любую другую подобную библиотеку SSL)

sudo apt-get install libssl-dev

3.3 Поиск флагов компоновщика

Вы можете использовать pkg-config (доступно на brew и apt), чтобы найти флаги компоновщика или большинство пакетов.

pkg-config <package-name> --cflags
pkg-config <package-name> --libs

Однако OpenSSL, установленный через Homebrew не может быть связан и, таким образом, не работает с pkg-config. Эти флаги должны работать:

include: /usr/local/opt/openssl/include
libs: /usr/local/opt/openssl/lib

Примечание. Некоторые библиотеки будут установлены в /usr/include и /usr/lib, которые не требуют явных флагов компоновщика. OpenSSL через APT устанавливается таким образом.

3.4 Использование флагов компоновщика

Флаги компоновщика можно добавить во время swift build

swift build -Xswiftc -I/path/to/include -Xlinker -L/path/to/lib

Они также могут быть добавлены во время генерации проекта Xcode.

swift package -Xswiftc -I/path/to/include -Xlinker -L/path/to/lib generate-xcodeproj

Ответ 2

@tanner0101 ваши предложения здесь https://github.com/vapor/vapor/issues/937 не решили проблему для меня. Я получаю, что CTLS пропускает ошибку не только на High Sierra, но и на Ubuntu внутри контейнера Docker.

Проект выполняется вручную, но MySQL не работает. Я думаю, что это https://github.com/vapor/vapor/issues/954 и это https://github.com/uchicago-cloud/mpcs51033-2017-spring-forum/issues/54 не просто развертывание на проблемах Heroku.