WIN10 VS2019 编译Cyrus SASL

article/2025/10/20 14:21:24

环境

  1. 下载安装Visual Studio 2019
    安装时在【工作负载】必须勾选【使用C++的桌面开发】
  2. 下载cyrus-sasl源码
    从Github上clone或者下载zip包,我本来是需要2.1.26,但是从从https://www.cyrusimap.org/releases/下载对应版本的源码包编译都有问题,因此直接从Github下载2.1分支的包,解压到C:\ ,并重命名C:\cyrus-sasl-2.1
  3. Python3.7环境(可选)
    我编译sasl是因为在windows使用python的sasl模块时有问题,因此通过python的sasl模块来调试生成的libdll是否可用(当然也可以直接通过sasl自带的clientserver或者其他调用软件进行调试)。从官网下载安装python3.7即可。

编译

  1. 打开编译控制台
    编译32位的,因此在开始菜单的Visual Studio 2019目录下选择【x86 Native Tools Command Prompt for VS 2019】;编译64位的就选择【x64 Native Tools Command Prompt for VS 2019】。下面先编译32位的,再编译64位的
    在这里插入图片描述
  2. 编译32位
    直接进入源码的lib目录
C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl STATIC=no
...
windlopen.obj : error LNK2001: 无法解析的外部符号 _anonymous_server_plug_init
...

查看是否执行成功,如果编译报以上错误,是静态链接插件的库不存在,可以选择需要修改win32/include/config.h注释所有静态插件,那么插件都通过动态链接库的形式提供;也可以选择将插件的文件从plugins拷贝到lib目录,并修改所有插件文件中的***_server_plug_init***_client_plug_init方法,在方法前面增加LIBSASL_API作为导出函数,并在lib\NTMakefile中添加对应的模块,具体查看https://jira.mongodb.org/browse/CXX-645#。我需要使用动态加载插件,因此直接修改config.h

// #define STATIC_ANONYMOUS 1
// #define STATIC_DIGESTMD5 1
// #define STATIC_NTLM 1
// #define STATIC_PLAIN 1
// #define STATIC_SCRAM 1

重新编译和安装,并拷贝lib\libsasl.lib命名为lib\sasl2.lib

C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl STATIC=no
C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl STATIC=no install
C:\cyrus-sasl-2.1\lib>copy /Y C:\sasl\lib\libsasl.lib C:\sasl\lib\sasl2.lib

接下来进入include目录安装头文件

C:\cyrus-sasl-2.1\include>nmake /f ntmakefile prefix=c:\sasl STATIC=no install

安装完成在prefix指定的目录C:\sasl会有如下

C:\SASL
├─bin
│      libsasl.dll
│      libsasl.pdb
├─include
│  └─sasl
│          *.h
└─liblibsasl.libsasl2.lib
  1. 编译64位
    打开x64 Native Tools Command Prompt for VS 2019的控制台,直接进入源码的lib目录,先清理之前32位的编译,同时修改prefixC:\sasl64
C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl64 STATIC=no clean
C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl64 STATIC=no
C:\cyrus-sasl-2.1\lib>nmake /f ntmakefile prefix=C:\sasl64 STATIC=no install
C:\cyrus-sasl-2.1\lib>copy /Y C:\sasl64\lib\libsasl.lib C:\sasl64\lib\sasl2.lib
C:\cyrus-sasl-2.1\lib>cd ..\include
C:\cyrus-sasl-2.1\include>nmake /f ntmakefile prefix=C:\sasl64 STATIC=no install

两个版本顺利安装完成

调试python的sasl

安装好python3.7和pip之后,直接安装sasl,32位的Python需要使用C:\sasl\,64位的Python需要使用C:\sasl64\

C:\>pip install sasl --global-option=build_ext --global-option=-IC:\\sasl64\\include --global-option=-LC:\\sasl64\\lib
......\sasl\saslwrapper.h(26): fatal error C1083: 无法打开包括文件: “unistd.h”: No such file or directory
...

unistd.h是Linux下的头文件,增加一个头文件放在INCLUDE路径所在的目录,我把它放在C:\sasl\include\C:\sasl64\include\

#ifndef _UNISTD_H
#define _UNISTD_H    1#define R_OK    4
#define W_OK    2
#define F_OK    0 #define access _access
#define dup2 _dup2
#define execve _execve
#define ftruncate _chsize
#define unlink _unlink
#define fileno _fileno
#define getcwd _getcwd
#define chdir _chdir
#define isatty _isatty
#define lseek _lseek#define size_t unsigned int#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2char *getpass(const char *prompt)
{    return "no pass";
}#endif /* unistd.h  */

重新编译,查看是否会报以下错误

C:\>pip install sasl --global-option=build_ext --global-option=-IC:\\sasl64\\include --global-option=-LC:\\sasl64\\lib
...LINK : fatal error LNK1181: 无法打开输入文件“sasl2.lib”
...

报以上错误是因为默认编译sasl生成的库是libsasl.lib,需要拷贝重命名为sasl2.dll

C:\>copy C:\sasl64\lib\libsasl.lib C:\sasl64\lib\sasl2.lib

如果报以下错误,那么可能是python的版本和sasl的版本不一致(32位还是64位必须一致)

C:\>pip install sasl --global-option=build_ext --global-option=-IC:\\sasl64\\include --global-option=-LC:\\sasl64\\lib
...
saslwrapper.obj : error LNK2001: 无法解析的外部符号 sasl_decode
...

检查确定sasl编译的时候使用了正确的版本。
一切顺利编译完成,还需要最后一步就是拷贝libsasl.dll到安装目录

C:\>FOR /F "usebackq delims=" %A IN (`python -c "from importlib import util;import os;print(os.path.dirname(util.find_spec('sasl').origin))"`) DO copy C:\sasl64\bin\libsasl.dll %A 

拷贝完成之后就可以在python中使用sasl

>>> import sasl
>>> client = sasl.Client()

注意python在单独使用sasl库的时候必须在init()方法之前初始化socket,否则会报初始化失败,具体原因查看[解决方案] Windows pyhive Could not start SASL分析


http://chatgpt.dhexx.cn/article/i1TUXjar.shtml

相关文章

Kafka3.0 SASL安全认证

下面主要介绍Kafka两种认证方式 kafka验证方式: SASL/PLAIN:不能动态添加用户配置文件写死账号密码 SASL/SCRAM: 可以动态的添加用户 SASL/PLAIN方式 cd /usr/local/kafka/kafka_2.12-3.0.1/bin/ ## 复制一份saslcp kafka-server-start.…

集成OpenLDAP与Kerberos实现统一认证(三):基于SASL/GSSAPI深度集成

文章目录 1. 写作背景2. 既定目标3. 重要概念3.1 SASL3.2 GSSAPI3.3 SASL与GSSAPI的关系3.4 saslauthd3.5 Kerberos化 4. 核心原理4.1 基于SASL/GSSAPI实现Kerberos账号登录OpenLDAP4.2 基于olcAuthzRegexp规则映射Kerberos与OpenLDAP账号4.3 基于saslauthd进行委托认证 5. 安装…

kafka sasl java_Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)

前些日子要封装一个kafka的客户端驱动,配置了下kafka环境,发现配置复杂度完爆rabbitmq很多倍啊,而且发布订阅模式使用起来也很麻烦,可能就胜在分布式了吧。 kafka需要java环境,自行安装java sdk 1.8. 官方加载安装包&a…

go kafka 配置SASL认证及实现SASL PLAIN认证功能

用户认证功能,是一个成熟组件不可或缺的功能。在0.9版本以前kafka是没有用户认证模块的(或者说只有SSL),好在kafka0.9版本以后逐渐发布了多种用户认证功能,弥补了这一缺陷(这里仅介绍SASL)。 本…

kafka集群开启sasl认证

kafka集群开启sasl认证 sasl认证 sasl 是扩展C/S模式验证能力的一种认证机制。它可以规范客户端和服务端传输应答和传输内容编码,简而言之sasl决定了认证的规则,即客户端如何存储身份证书、客户端与服务端如何校验密码都由sasl决定。当我们的客户端通过…

mysql sasl_SASL认证失败的原因(authentication failed)

SASL认证失败的原因(authentication failed) (2012-06-15 00:45:43) 标签: 杂谈 authentication failed) SASL认证失败的原因可分为如下几个可能的方面: Permission问题:对系统用户的SASL Auth尤其重要,要保证postfix用户(smtpd)对…

Kafka安全(以SASL+ACL为例)

目录 1 Security2 SASLACL实现用户及权限认证2.1 下载2.2 Kafka服务配置2.3 修改Kafka 服务启动脚本2.4 配置server.properties2.5 启动Zookeeper2.6 启动Kafka 集群2.7 ACL2.7.1 admin2.7.2 生产者2.7.3 消费者2.7.4 sharga用户2.7.5 shargb用户2.7.6 说明 2.8 生产者客户端代…

安装sasl出错

场景:python项目需要用到 pyhive0.6.4 pyhdfs0.2.2 thrift0.13.0 thrift_connector0.12 thrift_sasl0.3.0进项镜像构建时, 报错:error: command gcc failed with exit status 1 解决方法: 1.ubuntu系统: sudo apt-…

sasl认证原理

SASL - 简单认证和安全层 SASL是一种用来扩充C/S模式验证能力的机制认证机制, 全称Simple Authentication and Security Layer. 当你设定sasl时,你必须决定两件事;一是用于交换“标识信 息”(或称身份证书)的验证机制&#xff1…

kafka sasl java_Kafka 集群配置SASL+ACL

** Kafka 集群配置SASLACL 测试环境:** 系统: CentOS 6.5 x86_64 JDK : java version 1.8.0_121 kafka: kafka_2.11-1.0.0.tgz zookeeper: 3.4.5 ip: 192.168.49.161 (我们这里在一台机上部署整套环境) kafka 名词解析: Broker: Kafka 集群包含一个或多个…

kafka sasl java_Kafka SASL 安全认证

java client 中添加 SASL 设置信息: Java client consumer properties配置.png 注意 sasl.jaas.config 配置中的分号必不可少。 package kafka; import java.time.Duration; import java.util.Arrays; import java.util.Properties; import org.apache.kafka.clients.consumer…

SASL讲解,以及在Spark中的应用

是什么? SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。      SASL提供了一个通用的方法为基于连接的协议增加验证支持,而XMPP使用了一…

关于SASL的介绍文档

http://docs.sun.com/app/docs/doc/819-7056/6n91eac4q?lzh&aview 简单验证安全层 (Simple Authentication Security Layer, SASL) 介绍 SASL 为应用程序和共享库的开发者提供了用于验证、数据完整性检查和加密的机制。开发者可通过 SASL 对通用 API 进行编码。此方法避免…

文献管理与信息分析期末考试答案

可以在考试界面按ctrlf,对照着下图自己敲关键字搜索相应题目,感觉这样更方便点,也不会漏下题目。(仅供参考)

使用NoteExpress做文献管理

NoteExpress 是北京爱琴海软件公司开发的一款专业级别的文献检索与管理系统,具备文献信息检索与下载功能,可以用来管理参考文献的题录,以附件方式管理参考文献全文或者任何格式的文件、文档。 除此以为还有EndNote等其他文献管理软件&#x…

Zotero——一款文献管理工具

1.简介:Zotero是一款开源的文献管理工具,可以提供文献管理、浏览等众多服务,可以极大地为我们的科研和论文写作提供便利。 2.下载与安装 官方网站:Zotero | Your personal research assistant 我们可以直接在其官网上下载该软件…

使用 bibtex 进行参考文献管理

原  文:Bibliography management with bibtex 译  者:Xovee 翻译时间:2020年11月9日 使用 bibtex 进行参考文献管理 LaTeX 中直接支持参考文献的管理。本篇文章介绍如何使用thebibliography环境和BibTeX系统来管理参考文献。 注意&…

参考文献管理

一年以后latex和word都积累了一些经验再看这篇博客,发现有些小错误和语焉不详处,小修小改了一波。 处理参考文献真的是一件说复杂也很复杂,说简单也很简单的事,关键看能不能掌握门(tao)路,这里只…

Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入

本文介绍文献管理软件Zotero的基础使用方法,包括软件下载与安装、文献与PDF导入、在Word中插入参考文献等的方法。 在EndNote文献输出引用格式自定义修改与编辑界面解读(https://blog.csdn.net/zhebushibiaoshifu/article/details/115221112)…

学习笔记:MOOC 文献管理与信息分析

学习笔记:MOOC 文献管理与信息分析 文章目录 学习笔记:MOOC 文献管理与信息分析前言本科硕士博士的差异科研的特性读研的意义学习策略 学习与搜索两种类型的知识什么是需求?搜商基本检索及逻辑关系(AND OR NOT高级搜索命令检索图片…