Macos 不推荐使用的OpenSSL功能

Macos 不推荐使用的OpenSSL功能,macos,openssl,Macos,Openssl,在通过外部API将我自己的代码与某个系统的编程接口集成的过程中,我遇到了以下问题:苹果公司已将大部分OpenSSL API标记为“不推荐”。任何帮助都将不胜感激 我已经从2014年8月6日的网站上获取了OpenSSL 1.0.1i版本 试图静态链接到“病马”是徒劳的: 我想补充一下,我被指示用G++编译器编译C++代码如下: g++ test.cc -o test -lssl -lcrypto -lcurl 两个调用都以以下方式退出 输出示例: 源代码示例(test.cc): #包括 #包括

在通过外部API将我自己的代码与某个系统的编程接口集成的过程中,我遇到了以下问题:苹果公司已将大部分OpenSSL API标记为“不推荐”。任何帮助都将不胜感激

我已经从2014年8月6日的网站上获取了OpenSSL 1.0.1i版本

试图静态链接到“病马”是徒劳的:

<>我想补充一下,我被指示用G++编译器编译C++代码如下:
g++ test.cc -o test -lssl -lcrypto -lcurl
两个调用都以以下方式退出

输出示例:

源代码示例(test.cc):

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
字符串创建\u blob(常量字符串和用户名、常量字符串和密码);
字符串编码_base64(常量字符串&s);
字符串url_编码(CURL*CURL,const string&s);
字符串加密(常量字符串&s);
字符串时间戳_in_ms();
无效登录(常量字符串和用户名、常量字符串和密码);
模板
字符串到字符串(常量T&v)
{ 
细流ss;

ss警告表示您仍在针对apple提供的openssl库进行编译,因为此库中的
.h
文件是用弃用警告修饰的文件

您需要编译代码,在
/usr/local/ssl/include
中查找openssl include(假设您在那里安装了库的副本:

-I/usr/local/ssl/include
其次,OSX似乎不使用
-static
选项-无论您尝试什么,它都会链接到动态版本,因此您需要在路径中完整地显式引用
libcrypto.a
文件:

/usr/local/ssl/lib/libcrypto.a
因此,您的编译行变成:

g++ -I/usr/local/ssl/include test.cc -o test /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -lcurl

(我猜它是-lcurl,我以前从未见过libcurcl)。

“其次,OSX似乎没有使用-static选项—无论您尝试什么,它都会链接到动态版本。”-正确。他们甚至在iOS上这样做,这是不允许的!!!在这种情况下,另一个选择是删除共享对象,这样它就不能被链接。这不是一个损失,因为它无论如何都不能在iOS上实际使用。苹果上的其他gotcha是
rpath
LD\u PRELOAD
。这两个都会被默默忽略。他也需要告诉我们如果他正在调整运行时链接/加载程序,请使用e
DYLD\u LIBRARY\u PATH
。请参阅手册页。谢谢。我将继续并将此设置为我接受的答案。请注意Petesh的评论。Apple忽略
-Bstatic
,因此,如果可用,您将始终针对共享对象进行链接。这将导致加载Apple的0时出现模糊错误。9.8在运行时,即使您确定链接的是1.0.1版本。(0.9.8和1.0.1不是二进制兼容的,它会导致一系列奇怪的错误)。这应该是
-I
,而不是
-L
-L/usr/local/ssl/include
。但是你会使用
-L/usr/local/ssl/lib
。皮特的答案更完整,你应该听从他的建议。更重要的是:你可能也需要下载并根据1.0.1构建cURL。我不确定使用苹果的whic版本是个好主意h是针对OpenSSL 0.9.8编译/链接的。感谢您的评论。
-I/usr/local/ssl/include
/usr/local/ssl/lib/libcrypto.a
g++ -I/usr/local/ssl/include test.cc -o test /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -lcurl