哪个目录是openssldir?

iai*_*ain 6 openssl compilation

编译OpenSSL时,您可以添加2个选项(来自OpenSSL源中的INSTALL):

 Configuration Options  
 ---------------------

 There are several options to ./config (or ./Configure) to customize
 the build:

  --prefix=DIR  Install in DIR/bin, DIR/lib, DIR/include/openssl.
            Configuration files used by OpenSSL will be in DIR/ssl
                or the directory specified by --openssldir.

  --openssldir=DIR Directory for OpenSSL files. If no prefix is specified,
                the library files and binaries are also installed there.
Run Code Online (Sandbox Code Playgroud)

当编译依赖于OpenSSL的或可以添加其他的东西,一个选项将可用例如用于TINC--with-openssl是可用的.这应该指向给出的OpenSSL编译选项prefix还是openssldir

注意:我没有编译tinc,这只是我用清晰的例子找到的第一件事.

Pat*_*Nox 23

您还可以运行此命令来确定它安装在哪个目录中。

openssl version -d
Run Code Online (Sandbox Code Playgroud)

  • 这应该是最重要的答案,它也为我排序了!PS我发现Windows不会自动配置openssl,而cygwin会自动配置,所以我从那里完成了整个事情,并且效果非常好。 (2认同)

jww*_*jww 9

这是openssldir?

默认情况下,OpenSSL目录是/usr/local/ssl.如果你执行一个config没有--prefix和没有--openssldir,这是你默认获得的.

标题将位于/usr/local/ssl/include/openssl,图书馆将位于/usr/local/ssl/lib.

你应该更喜欢--openssldir,并避免巧妙的技巧,如--prefix=/usr覆盖发行版的OpenSSL副本.

如果您想提供更新的OpenSSL版本,那么请查看构建自定义程序包(个人程序包归档(PPA)),如使用自定义程序包覆盖发行程序包中所述?.

我目前正在研究OS X 10.8.5.这就是我的/usr/local/ssl样子(--openssldir由于多个OpenSSL构建,我使用了一个额外的目录路径):

$ ls /usr/local/ssl/
android-14    darwin    macosx-x64
android-18    ios       macosx-x86
Run Code Online (Sandbox Code Playgroud)

--with-openssl可用.这应该指向前缀或openssldir的OpenSSL编译选项吗?

是的(但这取决于).我已经用了很多不追加项目的经验includelib正确.

通常情况下,这些图书馆--with-openssl会以微妙的方式被打破.例如,假设您执行以下操作:

export CFLAGS="-I/usr/local/ssl/include"
export LDFLAGS="/usr/local/ssl/lib"
./config ... --with-openssl=/usr/local/ssl
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

在上面,您将编译并链接齿轮/usr/local/ssl.然后,当您执行程序时,它将链接到共享对象/usr/lib,而不是共享对象/usr/local/ssl/lib.

如果您的发行版提供0.9.8并且您有1.0.1英寸/usr/local/ssl,那么您将会遇到许多无法解释的无法解决的崩溃问题.对OS X上的这个问题保持警惕,因为Apple提供了0.9.8.

如果您和发行版都提供二进制兼容的东西(如1.0.1),那么您将缺少功能而无需解释.例如,您的OpenSSL版本将启用TLS 1.1和1.2,而Ubuntu的版本将禁用TLS 1.1和1.2(Ubuntu priot至14内置-DOPENSSL_NO_TLS1_2_CLIENT).你会想知道为什么你不能使用TLS 1.2进行连接.

如果您在OS X上进行编译,那么您会发现OS X会静默地丢弃您执行静态链接的请求(即-Bstatic -lcrypto -lssl).如果可用,链接器将始终使用共享对象(即使在iOS上,也不允许使用它!).而且它也会默默地忽略你-rpath.忘记LD_LIBRARY_PATH因为它没有荣幸(你必须使用DYLD_LIBRARY_PATHper dyld(1)).

处理OS X的最简单方法是:

cd <project>
grep -R "-lcrypto" *
<replace all occurences of -lcrypto with /usr/local/ssl/lib/libcrypto.a>
grep -R "-lssl" *
<replace all occurences of -lssl with /usr/local/ssl/lib/libssl.a>
Run Code Online (Sandbox Code Playgroud)

档案就像目标文件(它们是目标文件的集合),所以你甚至不需要-l.

如上所述强制静态链接时,您不必担心链接器会以静默方式丢弃您的请求或执行您不期望的操作.同样适用于Linux.事实上,我总是使用我自己的OpenSSL版本,而且我总是按照我的描述进行操作,因为我厌倦了与各种工具(不仅仅是ldEclipse和它的朋友)的斗争.

  • 哦,OS X 是一个特别讨厌的平台。让我为您添加注释;) (3认同)