草庐IT

vscode配置openssl include和lib环境(M1 mac)

学到老才能活到老 2023-04-12 原文

写在前面:

其实mac是unix内核的系统,默认就有openssl的环境,但是如果要使用openssl开发,都会重新来安装,你可以使用如下命令查看当前openssl版本:

openssl version

一、安装openssl

mac安装openssl有两种方式,一种是使用自带的brew工具,使用如下命令即可:

brew install openssl

这种方式默认安装最新版本的openssl,其实也可以指定版本号,如:

brew install openssl@1.1

这种只要系统环境没问题可以直接安装成功,这里说的系统环境主要是指brew能否正常使用安装。

安装成功可以使用如下命令查看安装地址:

whereis openssl

一般情况下,M1及之后的安装路径为

/opt/homebrew/opt/openssl@1.1

这是使用homebrew默认的安装地址。

还有一种方式是使用源码编译安装:

获取源码的方式很多,如直接在官网(/source/old/index.html)下载压缩包,或者在一个文件夹下终端使用git clone获取:

git clone git://git.openssl.org/openssl.git

或

git clone https://github.com/openssl/openssl.git

下载到本地之后(如果是压缩包,mac系统可双击解压到当前目录),然后进入目录(以openssl1.1版本为例):

cd openssl@1.1

然后使用如下命令先配置安装环境:

./config --prefix=/usr/local/openssl

注意上面这条命令,没有使用任何其他的参数,只用prefix指定了一个目录为/usr/local/openssl,这个目录是安装时include、lib和bin的目录地址,你也可以指定自己的目录,这个目录只是建议,执行过后如果没有报错就可以进行make了,

make

// 不报错继续执行

make install         // 这一步可能需要sudo权限

到这里其实如果没报错就已经安装成功了。

还需要一步将新安装的版本写入系统变量(注意.zshrc文件在  ~ 路径下,一般是隐藏的):

echo 'export PATH="/usr/local/openssl/bin:$PATH"' >> /.zshrc

source ~/.zshrc

你也可以直接打开这个文件写入:

vim .zshrc

//在文件结尾添加

export PATH="/usr/local/openssl/bin:$PATH"

这个时候再使用 `openssl version`命令就可以现实新安装的版本了:

kongds@kongds ~$ openssl version                                               
OpenSSL 1.1.1q  5 Jul 2022

二、配置vscode包含

既然你已经用到了openssl,那我默认你已经有了vscode配置好的C/C++环境了,接下来直接添加openssl的include和lib即可。

首先,我的vscode环境的c/c++环境是用的xcode配置的clang编译器,可以现在vscode新建一个openssltest.c文件,内容如下:

#include <stdio.h>
#include <string.h>
#include <openssl/md5.h>

int main()
{
    MD5_CTX ctx;
    unsigned char outmd[16];
    int i = 0;

    memset(outmd, 0, sizeof(outmd));
    MD5_Init(&ctx);
    MD5_Update(&ctx, "abc", 3);
    MD5_Final(outmd, &ctx);
    for (i = 0; i < 16; i++)

    {
        printf("%02X ", outmd[i]);
    }
    printf("\n");

    return 0;
}

这段代码目前没有任何意义,而且你的openssl一定会报错。

因为第一:你没有相应的头文件被包含,mac SDK某个版本之后不再默认支持openssl,第二,没有相应的库被包含,编译时需要。

这里提供两个方法:

第一种方式:

因为M1的mac是arm架构,所以其实在文件配置上跟x86是有一些区别的,比如如果你用homebrew安装的openssl,他安装是第三方软件之后,默认include 和lib不再在原本的/usr/local下,而是在/opt/homebrew/下,所以你可以先找到安装后openssl的include和lib路径,然后使用如下命令将其写入~路径下的.zprofile文件中,如我的,你改下你的路径即可

export C_INCLUDE_PATH="/opt/homebrew/opt/openssl@1.1/include"
export CPLUS_INCLUDE_PATH="/opt/homebrew/opt/openssl@1.1/include"

export LIBRARY_PATH="/opt/homebrew/opt/openssl@1.1/lib"

然后保存退出,使用如下命令使环境生效:

source ~/.zprofile

此时已经可以在vscode环境中找到头文件了,并且ssl和crypto库也已经可以使用了。

使用如下命令试试吧:

gcc openssltest.c -o openssltest -lssl -lcrypto

其实还有另一种方式:

首先,你可以通过右键stdio.h头文件->转到定义,这一步可以查看stdio.h的位置,如我的:

 可以看到,这是xcode环境下的一个inlcude文件夹,我们的思路就是把openssl的include文件夹复制到这里,

首先,需要找到这个路径,在finder里面,找到应用程序,找到xcode,然后右键点击显示包内容,即可一步步找到这个路径。可以使用组合键option+command+P显示完整路径。

 如上图,右键新建文件夹openssl,

这个时候再打开一个finder窗口,找到openssl的安装路径下的include文件夹,

 注意,这个路径默认是隐藏的,你可以:

进入到这里:

 进入Macintonish HD,这个时候里面默认只有四个文件夹,但是有很多隐藏文件夹,使用组合键 "shift + command + . "(注意,这里面是三个键)显示隐藏文件夹,然后即可找到openssl的安装路径文件夹,

使用command + a全选,command + c拷贝,然后粘贴到上面那个新建的openssl文件夹内。 

到这里,include路径配置完成,这个时候vscode的头文件包含已经不会报错了,但使用openssl还需要一些静态库,所以还需要两个文件:

找到这个路径(与include在同一个文件夹下):

 最后那两个libcrypto.a和libssl.a文件就是我已经添加进来的,你需要从openssl安装目录lib下找到这两个文件复制到这里即可。

配置完成!!!


这个时候,在vscode里面就可以执行上面那段测试代码了,那是一段关于md5摘要算法的测试,但注意,不是直接右键->run,这个时候还是会报错,你需要自己编译使用如下命令:

gcc openssltest.c -o openssltest -lssl -lcrypto

 这里面最关键的就是 -lssl和-lcrypto这两个选项,这是使用openssl几乎必须的。

如果到这里没问题,那就可以使用openssl在vscode环境里愉快的开发了。

踩了不少坑,有什么问题可以问我交流!!!!!!


写在后面:

Sadly, it looks like we're not supposed to use it any more.  As you say, it's included in the 10.10 SDK, but is deliberately missing from the 10.11 SDK.

我在其他地方看到关于这个问题的起因是苹果Mac sdk自从某个版本之后不再直接支持openssl,所以原有的路径找不到,可以自行查询相关声明。

有关vscode配置openssl include和lib环境(M1 mac)的更多相关文章

  1. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  4. ruby-on-rails - 如何在 mac os snow leopard 中升级 ruby​​ 和 rails - 2

    我想将我的MacSnowLeopardruby​​从1.8.7升级到1.9.1版本,有人知道轻松且最好的升级方法吗?因为我读了一些论坛/帖子/博客/讨论说覆盖苹果发布的ruby不好将Rails从版本2.2.2升级到2.3.8的最佳方法是什么?因为我找到的所有信息都仅适用于豹/老虎,而且很少有关于雪豹的复杂文章。他们还说覆盖apple提供的rails不好吗。谁能帮帮我?谢谢。 最佳答案 DanBenjamin有一些greatinstructionsforcompilingandinstallingRuby,RubyGemsandRai

  5. ruby-on-rails - 使用 config.threadsafe 时从 lib/加载模块/类的正确方法是什么!选项? - 2

    我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co

  6. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  9. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  10. ruby-on-rails - ruby gem如何在rails环境下工作 - 2

    我试图在rails中了解rubygems是如何变得可以自动使用的,而不是在使用required的文件中gem? 最佳答案 这是通过bundler/setup完成的:http://bundler.io/v1.3/bundler_setup.html.它在您的config/boot.rb文件中是必需的。简而言之,它首先将环境变量设置为指向您的Gemfile:ENV['BUNDLE_GEMFILE']||=File.expand_path('../../Gemfile',__FILE__)然后它通过要求bundler/setup将所有ge

随机推荐