哪个目录是openssldir?

 起飞吧和谐号况 发布于 2023-01-01 10:36

编译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.

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

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

1 个回答
  • 这是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
    

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

    在上面,您将编译并链接齿轮/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>
    

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

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

    2023-01-01 10:39 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有