link 和 runtime-link,搭配shared 和 static

本文探讨了C++库构建时link和runtime-link的四种组合方式,包括link=static runtime-link=static(静态链接)、link=static runtime-link=shared(静态编译动态运行)、link=shared runtime-link=shared(动态链接)。详细解释了各种配置下生成的库文件类型及其对可执行程序的影响,特别指出link=shared runtime-link=static是非法配置。同时,介绍了Windows下boost库的命名规则和动态链接库在运行时的加载机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

http://bbs.sjtu.edu.cn/bbscon,board,C,file,M.1300328832.A.html

http://noteonx.blogspot.com/2009/04/boost.html

http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html


C / C++库的形式,好晕啊!

boost库在build时,./b2 install 后面可以跟一些参数,涉及到动态库、静态库的参数有以下四种搭配方式:

link=static runtime-link=static

link=static runtime-link=shared

link=shared runtime-link=shared

link=shared runtime-link=static (这种配置我试的结果是,报错,这样的搭配是非法的)

究竟它们都是什么意思呢?


我的粗浅理解:

link=static runtime-link=static 

build出来的就是.a (windows .lib) 文件,没有.so (windows .dll) 文件,link到可执行程序中以后,就成为后者的一部分,和后者融为一体了

link=static runtime-link=shared 

build出来的同时有 .a (windows .lib) 文件和 .so (windows .dll) 文件,link时,是指定 .a (windows .lib) 文件,后者成为可执行程序的一部分,运行时,通过融入可执行程序的 .a (windows .lib) 的信息,去动态加载 .so (windows .dll) 文件,其实质仍然是动态链接

link=shared runtime-link=shared

build出来的只有 .so (windows .dll) 文件,没有.a (windows .lib) 文件,但是,可执行程序在运行时,怎么找到动态库文件并加载它呢?

### Jetson 平台上的 ONNX Runtime 安装配置 对于Jetson平台而言,ONNX Runtime的安装可以通过预构建的轮子文件来简化过程。具体操作如下: 下载特定于Jetson设备架构(aarch64)以及Python版本(此处为CPython 3.6)的ONNX Runtime GPU版轮子文件[^1]: ```bash $ wget https://nvidia.box.com/shared/static/jy7nqva7l88mq9i8bw3g3sklzf4kccn2.whl -O onnxruntime_gpu-1.10.0-cp36-cp36m-linux_aarch64.whl ``` 随后利用pip工具完成该包的安装工作: ```bash $ pip3 install onnxruntime_gpu-1.10.0-cp36-cp36m-linux_aarch64.whl ``` 为了确保最佳兼容性性能表现,在编译ONNX Runtime时建议遵循官方文档指导并指定适当参数,特别是当计划集成TensorRT作为执行提供者的情况下。需要注意的是,较新的ONNX Runtime可能存在一些尚未解决的问题,因此推荐采用稳定版本如v1.7.2进行自定义构建[^4]: ```bash ./build.sh --config Release --update --build --parallel --build_shared_lib --cudnn_home /usr/lib/aarch64-linux-gnu --tensorrt_home /usr/lib/aarch64-linux-gnu ``` 在C++项目中使用ONNX Runtime库之前,需修改`CMakeLists.txt`以正确引入依赖项。通过调用`find_package()`函数定位ONNX Runtime的位置,并将其链接至目标模块中去[^2]。 ```cmake # CMakeLists.txt 配置示例 find_package(onnxruntime REQUIRED) message(STATUS "onnxruntime_dir: ${onnxruntime_DIR}") target_link_libraries(${MODULE_NAME} PUBLIC onnxruntime::onnxruntime) ``` 另外一种常见的应用场景涉及到了TRTExec工具的应用——它允许用户基于现有的ONNX模型快速生成优化后的TensorRT引擎文件。下面给出了一条用于转换YOLOv5s模型的具体指令[^3]: ```bash /usr/src/tensorrt/bin/trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine --explicitBatch --fp16 ``` 以上就是针对Jetson平台上ONNX Runtime的一系列基本介绍与实践指南。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值