openssl/ctls使用蒸汽2的麻烦

tan*_*101 12 ssl openssl vapor

如何解决我在Vapor 2中遇到的这些OpenSSL/TLS问题?他们阻止我在命令行和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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

同样在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
       ^
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

Xcode因CTLS问题而失败

tan*_*101 16

此错误表示OpenSSL未安装或未正确链接.这个问题有三种解决方案.

选项1:使用蒸汽工具箱(推荐)

安装最新版本的Vapor工具箱.

如果您已经安装了工具箱,请先尝试卸载它:

which vapor
rm -rf /path/to/vapor
Run Code Online (Sandbox Code Playgroud)

1.1安装(macOS)

添加Vapor的Homebrew Tap

brew tap vapor/homebrew-tap
Run Code Online (Sandbox Code Playgroud)

更新Homebrew并安装工具箱.

brew update
brew install vapor
Run Code Online (Sandbox Code Playgroud)

1.2安装(Ubuntu)

添加Vapor的APT回购.

快速脚本

eval "$(curl -sL https://apt.vapor.sh)"
Run Code Online (Sandbox Code Playgroud)

手册

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
Run Code Online (Sandbox Code Playgroud)

安装

sudo apt-get update
sudo apt-get install vapor
Run Code Online (Sandbox Code Playgroud)

1.3完成

您现在应该可以访问该vapor程序,并且应该安装所有必需的依赖项.

vapor build
vapor xcode
Run Code Online (Sandbox Code Playgroud)

swift build 和相关的命令现在也应该正常工作.

swift build
swift package generate-xcodeproj
Run Code Online (Sandbox Code Playgroud)

选项2:安装Vapor的CTLS包

2.1安装(macOS)

添加Vapor的Homebrew Tap

brew tap vapor/homebrew-tap
Run Code Online (Sandbox Code Playgroud)

更新Homebrew并安装CTLS

brew update
brew install ctls
Run Code Online (Sandbox Code Playgroud)

重新启动终端,重新生成Xcode项目(如果使用Xcode),然后重试.

2.2安装(Ubuntu)

添加Vapor的APT回购.

快速脚本

eval "$(curl -sL https://apt.vapor.sh)"
Run Code Online (Sandbox Code Playgroud)

手册

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
Run Code Online (Sandbox Code Playgroud)

更新APT并安装CTLS.

sudo apt-get update
sudo apt-get install ctls
Run Code Online (Sandbox Code Playgroud)

2.3完成

swift build 和其他命令现在应该正常工作.

选项3:手动安装和链接OpenSSL或等效

3.1安装(macOS)

安装OpenSSL(或任何其他类似的SSL库)

brew install openssl
brew install libressl
Run Code Online (Sandbox Code Playgroud)

3.2安装(Ubuntu)

安装OpenSSL(或任何其他类似的SSL库)

sudo apt-get install libssl-dev
Run Code Online (Sandbox Code Playgroud)

3.3查找链接器标志

您可以使用pkg-config(在brew和apt上可用)查找链接器标志或大多数包.

pkg-config <package-name> --cflags
pkg-config <package-name> --libs
Run Code Online (Sandbox Code Playgroud)

但是,通过Homebrew安装的OpenSSL 无法链接,因此无法使用pkg-config.这些标志应该工作:

include: /usr/local/opt/openssl/include
libs: /usr/local/opt/openssl/lib
Run Code Online (Sandbox Code Playgroud)

请注意,有些库将被安装到/usr/include并且/usr/lib不需要明确的连接标志.通过APT的OpenSSL以这种方式安装.

3.4使用链接器标志

可以在期间添加链接器标志 swift build

swift build -Xswiftc -I/path/to/include -Xlinker -L/path/to/lib
Run Code Online (Sandbox Code Playgroud)

它们也可以在Xcode项目生成期间添加.

swift package -Xswiftc -I/path/to/include -Xlinker -L/path/to/lib generate-xcodeproj
Run Code Online (Sandbox Code Playgroud)

  • 既然你带了HomeBrew ...还看到[Homebrew拒绝链接OpenSSL](http://stackoverflow.com/q/38670295),[用Homebrew在OS X上更新OpenSSL](http://stackoverflow.com/ q/15185661),[如何安装最新版本的openssl Mac OS X El Capitan](http://stackoverflow.com/q/35129977),[如何在OS X中升级OpenSSL?](http:// apple. stackexchange.com/q/126830),[使用HomeBrew的Openssl安装失败](http://superuser.com/q/486389)等 (2认同)