新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenSSL编译安装避坑指南:从卸载到动态库配置全解析

发布时间:2026/10/1 12:29:28来源:尧图网络
OpenSSL编译安装避坑指南:从卸载到动态库配置全解析
最近连续帮几个朋友处理服务器上的 OpenSSL 问题发现大家翻车的姿势高度一致要么是系统自带的 OpenSSL 版本太老被安全扫描报告一堆 CVE急急忙忙想升级要么是吭哧吭哧编译装好了结果openssl version还是旧版本或者curl、wget直接罢工更惨的是连yum、sshd都不能用了。这篇文章把我这段时间踩过的坑、排查过的 bug 和最终的编译安装流程完整梳理一遍重点解决两个问题什么情况下才需要卸载 OpenSSL、怎么安全地把新版编译装好并且不把系统搞挂。内容适合正在被安全漏洞通报追着跑的运维、需要在生产环境升级加密组件的基础架构同学以及任何想搞清楚 OpenSSL 动态库和命令行工具关系的后端开发者。1. 为什么要折腾 OpenSSL版本混乱才是真正的痛点1.1 系统自带的 OpenSSL 通常“够用但不够新”绝大多数 Linux 发行版默认安装的 OpenSSL是发行版发布时锁定的版本。比如 CentOS 7 自带的是 1.0.2kCentOS 8 是 1.1.1Ubuntu 20.04 是 1.1.1fUbuntu 22.04 是 3.0.x。这些版本在新装系统那一刻是安全的但只要过了两三年安全公告里的 CVE 列表就会越来越长。尤其是 OpenSSL 1.0.2 系列官方早已停止维护一旦扫描器报出漏洞理论上就没有官方修复渠道了唯一出路就是升级到新版本。但问题恰恰出在“升级”这两个字上。OpenSSL 不是一个普通的应用软件它是一大批系统组件的基础依赖。openssl命令行工具只是冰山一角真正重要的是libssl.so和libcrypto.so这两个动态库它们被curl、wget、git、nginx、Apache、Python、Ruby、PostgreSQL、sshd等成百上千个程序链接着。换句话说OpenSSL 就像是整个系统加密通信的地基你在上面改了版本地上所有房子的地基连接方式都得跟着变。1.2 盲目卸载是最大的坑没有之一我见过最惨烈的操作是有人拿到漏洞扫描报告后直接在 CentOS 7 上执行了rpm -e openssl --nodeps想着先把旧版干掉再装新版。结果就是yum挂了、wget挂了、curl挂了连sshd都无法启动远程登录直接切断整个服务器处于半瘫痪状态。最后只能靠物理终端或者云厂商的 VNC 登录把包一个个装回去才恢复。为什么会这么严重因为 CentOS 系统的rpm、yum本身依赖 OpenSSL 做签名校验和 HTTPS 镜像源访问sshd依赖它做 SSH 加密ca-certificates包也依赖它做证书解析。你把地基拆了上面这些全得瘫。所以第一条铁律就是系统自带的 OpenSSL 绝不能直接卸载除非你做好了完整的备份和恢复预案并且明确知道自己在干什么。1.3 理清你需要的到底是“卸载”还是“共存”这篇文章标题写了“卸载”和“编译安装”实际操作中要把这两个动作拆开来看。如果系统自带的 OpenSSL 版本还能满足系统运行只是某些业务软件需要更高版本那正确做法是编译一个新版本安装到独立目录然后让特定软件去链接新版本系统旧版本保持不动。如果机器上已经有人手动编译过一个 OpenSSL装在了/usr/local/ssl或者/usr/local/openssl现在版本太老或者编译参数不对需要清理掉重新编译这才涉及“卸载自己编译的 OpenSSL”这种情况相对安全因为你不碰系统包管理器的文件。后面第 3 节我会把这两种卸载场景分别讲清楚第 4 节给出完整的编译安装流程第 5 节集中解决编译安装后最常见的几个 bug。先把概念理清才不会在操作的时候走弯路。2. 动手前必须做的三件事检查、备份、恢复预案2.1 确认当前 OpenSSL 版本与调用链不管你接下来打算卸载还是重新编译第一步永远是搞清楚现状。几个最基础的检查命令# 查看当前默认 openssl 命令的版本 openssl version -a # 查看 openssl 命令实际位于哪个路径 which openssl # 查看 openssl 命令依赖了哪些动态库 ldd $(which openssl) # 查看系统包里自带的 openssl 属于哪个包RPM系 rpm -qf /usr/bin/openssl # Debian/Ubuntu系用这个 dpkg -S /usr/bin/opensslopenssl version -a的输出除了版本号还会显示OPENSSLDIR这是 OpenSSL 查找配置文件、证书目录的位置。不同版本、不同编译方式的OPENSSLDIR不一样后续证书路径的问题排查全靠它。ldd输出同样关键。如果openssl version显示的已经是新版本但ldd /usr/bin/openssl里链接的还是/usr/lib64/libssl.so.1.1说明你调用的命令和动态库根本不是一套这种“精神分裂”状态就是很多诡异 bug 的来源。比如openssl命令报错说找不到libssl.so.3而系统里明明有多个 OpenSSL 目录就是路径没有建立统一关系。2.2 备份关键文件并记录依赖关系在动任何手术之前先把家底摸清并备份。重点关注这些文件和命令/usr/bin/openssl/usr/lib64/libssl.so和/usr/lib64/libcrypto.so的所有软链接和真实文件RPM 系或者/usr/lib/x86_64-linux-gnu/下的对应文件Debian 系/etc/pki/tls/或/etc/ssl/下的证书目录和配置文件ca-certificates.crt根证书包备份命令以 RPM 系为例# 备份二进制和动态库 mkdir -p /root/openssl_backup cp -a /usr/bin/openssl /root/openssl_backup/ cp -a /usr/lib64/libssl.so* /root/openssl_backup/ cp -a /usr/lib64/libcrypto.so* /root/openssl_backup/ # 导出当前已安装的 openssl 相关包列表 rpm -qa | grep openssl /root/openssl_backup/openssl_rpm_list.txt这套备份在后续出问题时能救命。即使你没有删除任何系统文件留着它们也是一种心理保险至少真搞挂了还有个退路。2.3 准备一个紧急恢复方案如果服务器是远程的而且还不在同一局域网我强烈建议你先确认云控制台的 VNC/终端功能可用再开始操作。一旦 SSH 服务依赖的 OpenSSL 或 libcrypto 被弄坏网络连接会瞬间断开没有带外管理通道就只能去机房了。恢复方案的核心思路是保留下载工具和 rpm 包文件保证系统包管理器在不依赖网络的情况下也能装回旧版。# 提前下载 openssl 相关 rpm 包到本地 # 在 CentOS 7 上执行 mkdir -p /root/openssl_rpms yum install --downloadonly --downloaddir/root/openssl_rpms openssl openssl-libs # 如果下载成功就有了本地安装包。当 yum 因 OpenSSL 损坏不可用时 # 可以直接用 rpm 强制装回 rpm -ivh /root/openssl_rpms/*.rpm --force类似的Debian 系可以提前用apt-get download openssl libssl1.1把 deb 包存下来。多花两分钟准备能把 4 小时的灾后重建省掉。3. 卸载 OpenSSL 的正确姿势能不动就不动3.1 哪些场景下才真正需要卸载先给结论系统自带的 OpenSSL90% 的场景都不应该手动卸载。真正需要“卸载”的通常只有下面几种情况一是机器上存在一个编译安装的旧版 OpenSSL目录在/usr/local/openssl或/usr/local/ssl下而且链接进了某些业务的动态库里现在要换成新版本最干净的做法是把旧目录删掉重装。这属于“清理自己的编译产物”不涉及系统包管理器风险可控。二是你曾经覆盖过系统文件把/usr/bin/openssl直接替换成了编译版或者把/usr/lib64/libcrypto.so.1.1换成了新版本的同名软链接导致系统原有的依赖链路出问题。这时候需要把“被误替换的系统文件”恢复成包管理器原装状态严格来说也不是“卸载”而是“恢复”。三是你确定这台机器只是个一次性测试环境没有 sshd、yum 这类系统服务需要保活那随便卸载随便折腾崩溃了大不了重装系统。3.2 卸载自己编译安装的 OpenSSL如果是删除/usr/local/openssl这种编译安装目录操作很简单# 先确认哪些程序正在使用这个目录下的库 lsof | grep /usr/local/openssl # 如果没有任何进程占用直接删除目录 rm -rf /usr/local/openssl # 删除相关的软链接 rm -rf /usr/local/bin/openssl rm -rf /usr/local/include/openssl rm -f /etc/ld.so.conf.d/openssl-custom.conf ldconfig删除之前想一下这个目录里的openssl.cnf如果有特殊配置先拷贝一份出来。另外如果/etc/ld.so.conf.d/下有你手动添加的 OpenSSL 库路径文件一定要一并删除否则删除目录后动态链接器还在找那边的.so文件加载任何依赖程序都会报错。3.3 已经误删系统包导致 yum/wget 全部失效的急救如果你已经踩了坑rpm -e openssl --nodeps把系统包干掉了症状通常是yum一执行就报Could not load shared library libssl.so.1.1wget、curl全都无法运行python报libcrypto相关错误更糟的是sshd直接起不来远程连接断开这时的急救思路是从本地备份或者同版本的其他机器上把 OpenSSL 相关 rpm 包强制装回去。如果备份了 RPM 包就直接做# 进入备份rpm包的目录 cd /root/openssl_rpms rpm -ivh openssl-*.rpm openssl-libs-*.rpm --force --nodeps ldconfig如果没有备份就在另一台同版本系统上手动下载 rpm 包用 U 盘或 scp 传过来再装。装完立刻验证openssl version ldd /usr/bin/openssl curl -I https://www.baidu.com三个命令都正常基本就缓过来了。急救完成之后再考虑是否需要真正的新版本而不是再次粗暴卸载。说句不好听的能在生产环境把系统 OpenSSL 卸载干净还全身而退的人几乎都是先在测试环境摔过无数次跟头的真心不建议用生产服务器去做这个实验。4. OpenSSL 编译安装全流程从源码到动态库4.1 下载源码与校验完整性确认系统状态正常后才开始新版本的编译安装。第一步去 OpenSSL 官网的 source 目录选择合适的版本我个人推荐 1.1.1 系列LTS维护到 2023 年 9 月或者 3.0 系列LTS支持到 2026 年追求功能就上 3.x追求兼容性稳定就选 1.1.1w 这类最终版。不推荐用 1.0.2太老了OpenSSL 3.0 的 API 变化也已经让很多老软件开始适配1.1.1 反而是目前兼容性最好的选择。以 3.0.13 为例cd /usr/local/src wget https://www.openssl.org/source/openssl-3.0.13.tar.gz wget https://www.openssl.org/source/openssl-3.0.13.tar.gz.sha256 # 校验哈希 sha256sum --check openssl-3.0.13.tar.gz.sha256看到OK输出再继续。这里的校验不能省安全组件如果下载到被篡改的源码包后续整条链路的可信度都归零。GitHub 上也有 OpenSSL 官方仓库的镜像但从官网下载最稳妥。4.2 安装编译依赖编译 OpenSSL 本身不需要太多依赖基本只需要 Perl、C 编译器、Make 工具如果要用 zlib 压缩支持还需要对应的头文件。RPM 系CentOS/Rocky/Almayum install -y gcc make perl-core zlib-develDebian 系apt update apt install -y gcc make perl zlib1g-dev有些精简系统可能还缺wget或tar这种属于基础工具缺失先装好。看起来都是废话但我在最小化安装的容器里踩过perl没装导致 configure 直接退出也碰到过没装make然后make命令找不到的提前装齐能少折腾半小时。4.3 configure 配置参数详解OpenSSL 的配置脚本是./config或./Configure。拿 3.0.13 举例进入解压目录后的推荐配置cd /usr/local/src/openssl-3.0.13 ./config \ --prefix/usr/local/openssl \ --openssldir/usr/local/openssl/ssl \ shared \ zlib \ no-tests逐个解释参数的含义--prefix安装路径所有二进制、库文件、头文件的根目录。我习惯用/usr/local/openssl而不是直接的/usr/local/ssl加版本号或者独立路径能避免和系统目录混淆后面卸载清理也方便。--openssldirOpenSSL 运行时的配置和证书目录默认会在里面找openssl.cnf、certs、private。这里我习惯设成/usr/local/openssl/ssl。shared生成动态库也就是libssl.so和libcrypto.so。这个参数必须加不加的话只生成静态库很多第三方程序编译链接会有问题。zlib开启 zlib 压缩支持适合需要处理压缩数据的场景前提是安装了 zlib-devel。no-tests不编译测试套件能节省不少编译时间。测试环境无所谓生产环境如果时间充裕也可以去掉做完make test更安心。有些教程会加--prefix/usr/local想把新版直接覆盖到系统路径我强烈不建议这么干。你无法确定系统里到底有多少个程序链接了旧版 OpenSSL贸然覆盖系统动态库路径是制造混乱的最快方式。独立目录加路径管理才是可持续方案。4.4 make 编译与 make install 安装配置没问题的话出现一堆Configured for linux-x86_64之类的输出。然后开始编译# 根据 CPU 核数并行编译比如 4 核就用 -j4 make -j$(nproc)注意nproc如果返回 16、32 甚至更高make -j32会在编译过程中吃掉大量内存。OpenSSL 编译单个文件的内存峰值不算特别离谱但小内存机器上建议手动限制并发数比如make -j4。出现过gcc: internal compiler error: Killed这种报错多半就是内存不够降低并发后重新make即可。编译完建议先跑一遍测试make test如果你选择了no-tests这一步会跳过。测试全部通过后安装make install安装完成后看看目录树find /usr/local/openssl -maxdepth 2 -type f | head -20如果看到bin/openssl、lib64/libssl.so、lib64/libcrypto.so、include/openssl/ssl.h这些关键文件安装本体就完成了。这里有个平台细节64 位 Linux 上库文件通常装在lib64而不是lib这个待会儿配置动态库路径要用到。4.5 动态库链接最容易翻车的一步make install装完了但你直接在终端执行openssl version大概率看到的还是旧版本。为什么因为/usr/bin/openssl这个系统自带命令还在而你的新命令放在/usr/local/openssl/bin/opensslPATH环境变量里/usr/bin排在前面。这是“装完发现没变”的头号原因。正确的做法不是去覆盖/usr/bin/openssl而是把新版的前置到 PATH 里并让动态链接器能找到新的.so文件。先配置动态库路径echo /usr/local/openssl/lib64 /etc/ld.so.conf.d/openssl-3.0.13.conf ldconfig然后验证动态库是否已生效ldconfig -p | grep ssl我的测试机上执行ldconfig -p | grep ssl后能看到/usr/local/openssl/lib64/libssl.so.3说明新库已经被系统识别。如果只有一个libssl.so.3没问题这是新版本独立的 soname不会顶掉系统旧版的libssl.so.1.1两台版本的库可以共存。接着配置命令行工具的 PATH 优先级echo export PATH/usr/local/openssl/bin:$PATH /etc/profile.d/openssl.sh source /etc/profile.d/openssl.sh再次验证which openssl openssl version -a这时的which openssl应该显示/usr/local/openssl/bin/opensslopenssl version应该输出OpenSSL 3.0.13。搞定这一步命令行层面的切换就完成了。但注意这只是让新登录的 shell 默认用新版命令curl、nginx这类程序是编译时链接的旧版本动态库它们的行为不归这个 PATH 管后面第 5 节单独说。5. 编译安装后最常见的 Bug 与解决办法5.1 运行 openssl 报 libssl.so.3 找不到编译装完openssl version一执行就报openssl: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory这个 bug 出现的原因就是动态链接器没有找到新库的位置。ldd $(which openssl)会看到libssl.so.3 not found。解决办法就是我刚才说的两步写/etc/ld.so.conf.d/下的配置文件然后ldconfig。如果ldconfig后还是报错看看路径写对没有。有些机器上是lib而不是lib64以find /usr/local/openssl -name libssl.so*的实际输出为准。还有一种情况是ldconfig正常但当前 shell 的缓存没刷新可以试试export LD_LIBRARY_PATH/usr/local/openssl/lib64:$LD_LIBRARY_PATH这个环境变量是临时手段适合紧急跑命令长期还是写进ld.so.conf.d方案更稳妥。5.2 编译第三方软件时提示 OpenSSL 版本冲突常见场景你编译 nginx、curl、Python 3.8、PHP 之类的软件configure 阶段直接报checking for OpenSSL... configure: error: Not found 或 error: openssl/ssl.h: No such file or directory这是因为这些软件的编译过程需要找 OpenSSL 的头文件和库文件但默认搜索路径是/usr/include、/usr/lib64而新版装到了/usr/local/openssl下面。解决办法是在编译时显式告诉它新路径以 nginx 为例./configure \ --with-openssl/usr/local/openssl \ --with-openssl-optenable-tls1_3 \ --with-http_ssl_module以源码编译 Python 3.8 为例./configure \ --prefix/usr/local/python3.8 \ --with-openssl/usr/local/openssl \ --with-openssl-rpathauto更通用的方式是导出编译环境变量export CPPFLAGS-I/usr/local/openssl/include export LDFLAGS-L/usr/local/openssl/lib64 -Wl,-rpath,/usr/local/openssl/lib64这里有一个易混点--with-openssl参数在某些软件里默认会直接把 OpenSSL 源码目录一并编译比如 nginx这就可能出现“系统库已经是 3.0但 nginx 自己又编译了一份内嵌版本”的情况排查时nginx -V的输出会显示它用的哪个路径。不能只看系统里装了新版就以为所有组件都在用新版。5.3 证书校验失败unable to get local issuer certificate装完新版 OpenSSL 后很多人会遇到 HTTPS 请求失败报错SSL certificate problem: unable to get local issuer certificate常见原因是新版 OpenSSL 没有正确找到系统根证书。OpenSSL 3.x 默认的证书路径由编译时的--openssldir决定如果装到/usr/local/openssl/ssl它会去那里找cert.pem和certs目录但系统根证书并不在这个目录下。解决办法是让新版 OpenSSL 指向系统的证书包。RPM 系是/etc/pki/tls/certs/ca-bundle.crtDebian 系是/etc/ssl/certs/ca-certificates.crt。用软链接指向即可# RPM 系 ln -sf /etc/pki/tls/certs/ca-bundle.crt /usr/local/openssl/ssl/cert.pem # Debian 系 ln -sf /etc/ssl/certs/ca-certificates.crt /usr/local/openssl/ssl/cert.pem也可以设置环境变量临时指定export SSL_CERT_FILE/etc/pki/tls/certs/ca-bundle.crt export SSL_CERT_DIR/etc/pki/tls/certs这组变量在调试时特别好用直接在命令行前加上就能验证是不是证书路径问题。如果curl -I https://www.baidu.com能通了说明就是路径没指好。5.4 系统工具还在用旧版本兼容还是强切你安装了新版 OpenSSL 之后curl -V输出可能还是OpenSSL 1.0.2k-fipsnginx -V也可能显示旧的OpenSSL 1.1.1。这是预料之中的因为它们是编译时装好的动态库引用不会因为你 PATH 变了就自动升级。要做到整机隔离只能重新编译这些依赖 OpenSSL 的软件。这是个系统工程不是三言两语能讲完的这里只给一个思路优先级先确认业务上哪些程序必须用新版比如 Nginx 要 TLS 1.3、某项目需要 SM2/SM4 国密算法只对它们做重编译其他不敏感的程序保持系统版不动。这里尤其要提醒不要把curl的旧版动态库软链接直接指向新库。新旧 soname 不同直接替换软链接会导致二进制兼容问题轻则个别报错重则进程崩溃。5.5 版本混用导致哈希算法或加密结果不一致有的读者在编译安装后发现同一个字符串的 SHA256 输出发生变化或者用 OpenSSL 命令行生成的证书在业务代码里验签失败。这类问题往往不是算错了而是命令和库混用了。举例shell 的openssl已经切换成了/usr/local/openssl/bin/openssl但它依赖的libcrypto.so被LD_LIBRARY_PATH强行指到了系统旧版目录或者反过来走了另一个库。openssl version -a输出里能看到编译和运行时的信息但最直接的办法还是ldd $(which openssl)看它实际加载了哪些.so文件确保libcrypto.so.3和libssl.so.3都指向/usr/local/openssl/lib64下的文件。多版本 OpenSSL 存在的机器上排查问题的第一反应永远是ldd而不是凭印象猜。我在不同的机器上被这点坑过太多次openssl version显示版本是新的但实际调用链还是旧库业务里国密算法根本跑不起来人还蒙在鼓里。6. 常见问题速查表把这一路折腾遇到的高频问题和解决办法整理成表格方便大家直接对照检查。症状可能原因解决办法openssl: error while loading shared libraries: libssl.so.3动态库路径未配置写/etc/ld.so.conf.d/openssl.conf后执行ldconfigopenssl version还是旧版本PATH 未指向新二进制echo export PATH/usr/local/openssl/bin:$PATH /etc/profile.d/openssl.sh后重新登录openssl/ssl.h: No such file or directory第三方软件编译找不到头文件编译时加CPPFLAGS-I/usr/local/openssl/includeSSL certificate problem: unable to get local issuer certificate新版找不到系统根证书软链/etc/pki/tls/certs/ca-bundle.crt到$openssldir/cert.pemyum/wget 全部 unable to load shared library系统 OpenSSL 被误删或误替换用备份 rpm 包强制装回rpm -ivh openssl*.rpm --force --nodepsgcc: internal compiler error: Killed编译并发太高导致内存不足降低并发数make -j2curl -V显示旧版 OpenSSLcurl 编译时链接了旧库如需新版则重编译 curl否则保持共存nginx -V显示旧版 OpenSSLnginx 未使用新版编译重编译 nginx 并--with-openssl/usr/local/openssl特别说明一个容易误判的点openssl命令的 PATH 切换成功了不代表整个系统的 OpenSSL 都“升级”了。只要curl -V、nginx -V还在显示旧版就说明这些软件还在走旧动态库。这是共存状态不一定是错但如果你就是想全链路升级那么所有依赖 OpenSSL 的程序都得重新编译一遍。7. 一点实操建议在整个操作过程中我的体会是不要追求“最新版本”而是选一个“长期维护版本”并一直用下去。比如现在的 3.0 LTS 系列官方支持到 2026 年足够覆盖大多数业务的合规和性能要求。每次升级前先在测试环境完整跑一遍openssl version、curl -I https://www.xxx.com、openssl s_client -connect xxx:443这些命令确认新版本对业务 TLS 连接和证书链没有副作用再上生产。最后分享一个小技巧我在生产环境习惯写成软链接管理多版本/usr/local/openssl这个目录本身就是一个指到具体版本的软链接。比如先装/usr/local/openssl-3.0.13再ln -s /usr/local/openssl-3.0.13 /usr/local/openssl这样将来切换版本只需改一个软链接/etc/ld.so.conf.d里的路径和第三方软件的--with-openssl参数都不用动。恢复旧版本也一样改一下链接就能拉回上一个可用状态这种方案在踩坑的时候真的能救命。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从零构建AI工程能力:大模型训练、数据与推理实战指南 2026/10/1 18:21:11

从零构建AI工程能力:大模型训练、数据与推理实战指南

最近开源社区和社交媒体上,关于“AI engineering”的讨论热度又上了一个台阶。很多人私信我,问得最多的就是:“我想从零开始搞AI工程,到底该学什么?是不是调几个开源模型、包装一下API就算入门了?”说实话&…

阅读更多 →
Java面试刷题的本质与系统化备战:从信号博弈到结构化表达 2026/10/1 18:21:11

Java面试刷题的本质与系统化备战:从信号博弈到结构化表达

1. 面试不是考试,是一场信号博弈 我自己既做过求职者,也坐在面试官的位置上聊过不少候选人。先说一个可能有点反直觉的结论:Java程序员面试之前刷题,核心目的从来不是为了"押中面试题",而是为了对抗面试这场…

阅读更多 →
COMSOL多物理场电弧仿真:MHD耦合与烧蚀深度计算全解析 2026/10/1 18:21:11

COMSOL多物理场电弧仿真:MHD耦合与烧蚀深度计算全解析

做开关电器、等离子体焊枪或者高压断路器设计的朋友,应该都有同一个感受:电弧是工程问题里最复杂、最棘手、也最迷人的物理现象之一。一个小小的放电通道,温度轻轻松松上万K,电流密度、气流速度、热辐射和材料烧蚀全部挤在一个毫米…

阅读更多 →
Windows环境下Cypress从零搭建与实战:对比Selenium的现代前端测试方案 2026/10/1 18:21:11

Windows环境下Cypress从零搭建与实战:对比Selenium的现代前端测试方案

做了这么多年自动化测试,用的一直是Selenium那一套,WebDriver、findElement、显式等待、浏览器驱动匹配版本,这套打法在传统Web项目里确实够用。但是当你开始做现代前端项目,尤其是SPA单页应用、React/Vue组件化页面,或…

阅读更多 →
从零构建推理模型:三个月吃透AI工程核心路线图 2026/10/1 18:21:11

从零构建推理模型:三个月吃透AI工程核心路线图

如果你跟我一样是写代码出身,这几年一定被问过无数次:“现在大模型都这么强了,还有必要从零开始学AI工程吗?”我自己的体会是,这个问题的答案取决于你到底想当“用户”还是“工程师”。用API、搭Agent、做RAG&#xff…

阅读更多 →
第十届中国开源年会COSCon参会全攻略:从报名到会后跟进不踩坑 2026/10/1 18:21:04

第十届中国开源年会COSCon参会全攻略:从报名到会后跟进不踩坑

一年一度的开源年会报名季又到了,开源圈子里不少群已经开始讨论同一个话题:COSCon 到底怎么逛才不亏。作为从第一届中国开源年会就跟着跑场子的老观众,今年第十届我照例会去蹲。这个由开源社主办的年度聚会,和普通技术大会最大的不…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉