You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在setup.py中引入已编译OpenSSL 3.0文件解决LNK2001链接错误

问题原因

LNK2001错误是链接器未找到OpenSSL对应的导出符号,你的原有配置没有将OpenSSL的静态导入库加入链接依赖,同时存在路径配置错误、打包规则配置错误的问题。

可行解决方案

1. 修正Extension链接配置

你需要在Extension参数中显式指定OpenSSL的库搜索路径和要链接的导入库:

  • 删除include_dirs中无用的lib、bin路径,仅保留头文件目录
  • 新增library_dirs参数指定OpenSSL lib文件所在路径
  • 新增libraries参数指定要链接的libcrypto、libssl导入库

2. 修正DLL打包配置

原有package_data配置格式错误,且不会自动将DLL放到运行时可加载的路径,改用data_files参数指定安装时将DLL直接放到site-packages目录,适配无网环境直接使用。

3. 修正路径笔误

原有配置中存在./crypto/Openss/的拼写错误(少写了一个l),需要修正路径,删除重复的lib文件配置。

修改后完整setup.py代码

from distutils.core import setup, Extension
    
setup(
    name='test',
    version='1.0',
    # 指定安装时将openssl dll复制到site-packages根目录
    data_files = [
        ('Lib/site-packages', [
            r"./crypto/Openssl/bin/libssl-3.dll", 
            r"./crypto/Openssl/bin/libcrypto-3.dll"
        ])
    ],
    description='test',
    # 仅保留头文件目录
    include_dirs = [r'./crypto/Openssl/include'],
    ext_modules=[
        Extension(
            "test", 
            sources=[r'./example/example_main.cpp'],
            # 指定lib搜索路径
            library_dirs = [r'./crypto/Openssl/lib'],
            # 指定要链接的openssl导入库
            libraries = ['libcrypto', 'libssl']
        )
    ]
)

编译注意事项

由于你使用的是32位Python + 32位编译的OpenSSL,在64位PowerShell中执行编译时,需要强制指定32位平台编译,执行命令:
python setup.py install --plat-name=win32
编译完成后可直接在无网环境安装生成的包,OpenSSL的DLL会被自动打包到安装目录,无需额外安装OpenSSL。

内容的提问来源于stack exchange,提问作者user10731525

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:27:02