• 正文
  • 相关推荐
申请入驻 产业图谱

Conan:一站式嵌入式 C/C++ 依赖管理利器

10小时前
300
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

Conan 是一个开源、跨平台的 C/C++ 依赖和包管理器,旨在解决 C/C++ 项目依赖管理的碎片化问题。它通过中心化的方式获取、构建并集成所需的第三方库,能极大地提高开发效率和项目可维护性。

Conan 把「谁编、用什么链、要什么版本」写成文件,进仓库;需要手搓的命令,改成一条流程。

手工编译时,其实你一直在盯这四件事

手工编 ≠ 只用一条 Configure。你其实在同时盯住四件事:ABI(软/硬浮点等)、rootfs/sysroot 是否合拍、和其它库会不会 两套 OpenSSL 混装、三个月后 谁能复现。漏一个,就出现「我这里能链 / 你那红」。

手工阶段,需要注意四个问题:

换成 Conan,同一类事变成可查的文件和流程——从口头上「收口」到仓库里能看见:

三件事先说清:Recipe、Profile、生成器

叫法 人话
Recipe 配方 这包 OpenSSL「怎么下源码、开关怎么开、吐出啥」
Profile 「用哪把交叉刀、给谁编」——前缀、架构、libc、编译选项
生成器 Generator 告诉 CMake/Makefile:头文件和库到哪找(如 CMakeDeps + CMakeToolchain

OpenSSL 待在栈里的哪一环(升级不单是换路径)

升级 OpenSSL 不是换目录:协议栈、libssl/静态链、证书路径、有没有动态加载插件,都要心里过一遍。

动手跑通(Conan 2 + CMake 链接 OpenSSL)

第 1 步:准备一个交叉 Profile(示例骨架)

在项目里放一个纯文本 Profile,例如 profiles/arm64-release,核心是:编译器前缀、必要时 sysroot、以及 arch/os/compiler 与板子一致。不要和环境里残留的 CC 混着来。

示例(按需改前缀和路径——路径别照抄):

[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=17
compiler.libcxx=libstdc++
compiler.version=12
os=Linux

[conf]
tools.cmake.cmaketoolchain:generator=Ninja

[buildenv]
CC=aarch64-none-linux-gnu-gcc
CXX=aarch64-none-linux-gnu-g++

# 若用你的 SDK 的根文件系统当 sysroot:
# tools.build:sysroot=/path/to/your/sysroot   (写法随 Conan/SDK 微调)

第 2 步:conanfile.txt 声明要 OpenSSL + 生成器

放在工程根或与 CMake 同级、你习惯的位置:

[requires]
openssl/3.3.2

[generators]
CMakeDeps
CMakeToolchain

版本号改成团队锁定的那一个;是否要 zlib 等由 openssl 配方决定,--build=missing 会在缺二进制时帮你编。

第 3 步:conan install:拉依赖 + 吐 CMake 用文件

在工程目录执行(-host 用你的交叉 Profile;-pr:b default 表示「给 Conan 自己要跑的小工具用手本机」,常见写法——若你公司有固定模板跟着走即可):

conan install . --output-folder=build -pr:h=profiles/arm64-release -pr:b=default --build=missing

生成的东西落在 build 里,CMake 要指过去。

第 4 步:CMakeLists 两件事

find_package(OpenSSL REQUIRED)
target_link_libraries(你的目标 PRIVATE OpenSSL::SSL OpenSSL::Crypto)

再在 build 目录/configure 时载入 Conan  toolchain,例如 Conan 生成的 build/conan_toolchain.cmake,把下面命令里的文件名和你在 install 后实际看到的对齐即可:

cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=build/conan_toolchain.cmake
cmake --build build

conan install 之后:磁盘上多出什么(关系图)

进 git 的是 profile + conanfile,不是整个 OpenSSL 源码树(除非你有意 vendor)。

从写好 Profile 到板子冒烟

链接失败或运行异常:按这个顺序查

不用堆理论,直接按顺序排:动态链时,ldd 你的程序 在真机上看一眼。

适合你吗?读完建议先做的一步这些情况先别急着上 Conan

嵌入式 Linux + 多方协作 + OpenSSL:常常值MCU 裸机、或整机镜像被 Yocto 锁死且禁止第二套 openssl:先跟镜像负责人对齐「唯一真相源」,别自行再塞一层。

上板与发版前:五项自检

Profile、conanfile、OPENSSL 版本写进 README 或一页 wiki。新员工按文档

不靠私聊 能

install + 链过。动态链:

rootfs 里的

libssl.so /

SONAME 和编出来的一致。Conan 1 / 2

别混着说,团队统一一条文档链接。

小结

手搓最大的问题不是命令长,是状态和人不在一起。先用「一个最小 CMake 程序 + openssl + 交叉 Profile」把闭环跑绿,再上 CI;这比先开大道理会省事得多。MCU、或 Yocto 已垄断镜像时,换一个战场谈「谁在镜像里控盘」——工具永远服从交付链。

一份打通“应用→驱动”的Linux底层修炼指南!

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

本公众号专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,公众号内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!