因链接静态库先后顺序不正确,引起符号定义找不到

【扫地机器人测试】 本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。 阅读详情
问题

项目中需要链接多个静态库,在编译的时候报错如下

sdi_io.cpp:(.text._ZN13sdi_H264EncIO7DataPopEPm+0x30):对‘H264ENC_StatusGet(H264ENC_Status_t&)’未定义的引用

可能原因是符号确实没有定义,而本文出现这个问题的原因是,链接的静态库有前后的依赖顺序

解决方案

方法一:修正静态库的链接顺序:可以通过手动的修改静态库的链接顺序
方法二:忽略静态库的链接顺序:编写 CMakeLists.txt 时,链接静态库可以忽略静态库的链接顺序,示例如下

target_link_libraries(${PROJECT_NAME}  
     -Wl,--start-group
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libapexdrv.a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libsdi.a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libseqdrv.a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libsumat.a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libumat.a
     ${CMAKE_CURRENT_SOURCE_DIR}/lib/libviudrv.a
     -Wl,--end-group
)

其中使用的忽略链接的选项是 Wl,前后都要加上配置选项

嵌入式RTOS实战:uC/OS-III最新版移植指南(附项目源码) 本文提供uC/OS-III实时操作系统的完整移植指南,涵盖源码配置、工程搭建到任务调度的全流程。针对移植中的常见编译错误,给出关键修改方案(如中断重定义、配置使能等),附已验证的工程源码,通过LED任务实验验证稳定性,帮助开发者高效完成移植。适合嵌入式工程师及RTOS学习者参考。 阅读详情

相关推荐

双目立体成像(一)双目图片生成点云

利用左右目图片生成点云

qq_62964142的博客 4552

cmake链接库时报未定义错误

问题:在工程中链接了一个静态库,当调用静态库中的API时,在编译过程中报错printf等函数未定义。 解决:先链接libm再链接libc 修改前: target_link_libraries(${target} PRIVATE ${libc_file_name} ${libm_file_name} ${libgcc_file_name}) 修改后: target_link_libraries(${target} PRIVATE ${libm_file_name} ${libc_file_nam

cq17805982133的博客 2960

快速上手CH340N电路设计(CH340N USB转串口模块 USB Type-C接口 CH340系列芯片讲解)

一、上模块 二、功能分析 l 芯片:CH340N l 输入接口:USB、TYPE-C l 输出接口:TTL(5V\3.3V\GND\TX\RX) l 指示灯:电源、TX、RX 三、CH340x芯片 l CH340 是一个 USB 总线的转接芯片,实现 USB 转串口 l 全速 USB 设备接口,兼容 USB V2.0 l 硬件全双工串口,内置收发缓冲区,支持通讯波特率 50bps~2Mbps l 支持常用的 MODEM 联络信号 RTS、DTR、DCD、RI、DS...

东小东博客 5万+

cmake连接自己封装的库时报接口找不到定义问题

如果自己的库引用了其他库,需要把自己的库在target_link_libraries中放在被引用的库前面。自己编译好库后在cmake中引用,链接时报接口未定义的错误。

qq_25776687的博客 348

【电驱动】永磁同步电机工作原理及分类

永磁同步电机工作原理及分类

星Yeah 的博客 7331

Deepracer 智能无人车-绿洲科学云平台介绍

Deepracer 智能无人车 绿洲科学云

woaixiyue19831的博客 1946

内联函数报错:“函数未定义引用“

内联定义写在头文件里定义在实现文件(c/cpp)

m0_63647324的博客 1926

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 452

target_link_libraries链接库顺序,导致报错‘未定义’

target_link_libraries链接库顺序,导致报错‘未定义’

HL_LOVE_C的博客 1078

MATLAB点云处理总目录

点云处理研究学习

weixin_44329757的博客 2556

康耐视visionpro-CogBlobTool工具详细说明

康耐视visionpro-CogBlobTool工具详细说明

视觉人机器视觉的博客 1728

C++中链接静态库报错未定义的引用问题分析

makefile 已经指定了静态的位置,并且Makefile能找到静态库,但是仍然报错函数未定义。可能原因是静态库使用了C语言编写,源码中没有使用extern "C"编译。

qq_38292379的博客 1247

基于深度学习的图像修复系统,GAN图像修复,图像修复算法研究,并实现系统登录和注册,全网独发

近年来,深度学习已成为计算机视觉领域的研究热点,基于深度学习的图像修复技术弥补了传统修复方法长期存在的不足,显著提高了生成结果的质量。深度学习是指模仿人脑机制设计的具有深层结构的神经网络。深度学习作为一种表征学习,通过模仿人脑神经元之间的信息传递方式来学习输入数据的特征,并找到输入和输出数据之间的映射关系。通过在图像修复中应用深度学习技术,可以准确学习图像的语义信息,然后根据信息预测缺失的内容,大大克服了传统修复算法的不足,使结果更具逻辑性。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 8267

GCC链接器静态库链接顺序浅析

1. 编译链接介绍 一份C代码要编译成为可执行文件,需要经历以下步骤:预编译,编译,汇编,链接[1],如图1。 图1 编译和链接过程 首先,在预编译阶段,源代码文件被预编译器cpp预编译成一个.i文件。预编译主要处理源代码文件中的以”#”开始的预编译指令。比如:”#include”、”#define”等。经过预编译后的.i文件不包含任何宏定义。 编译阶段就是把预处理完的文件...

piaomiaoxi2的专栏 3378

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ld 无法找到项目符号 链接失败_链接过程中静态库先后顺序的影响分析

问题描述项目中准备引入redis,采用acl的c++库对redis进行访问。acl的示例代码如下所示#include <unistd.h> #include "acl_cpp/lib_acl.hpp" static acl::string __keypre("test_key"); static bool test_set(acl::redis& cmd, int n) {...

weixin_39533742的博客 264

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

5.15 vs2019 静态编译_链接过程中静态库先后顺序的影响分析

问题描述项目中准备引入redis,采用acl的c++库对redis进行访问。acl的示例代码如下所示#include 对示例代码进行编译链接`报了许多链接的错误(aio_listen_stream.o问题分析acl和acl_cpp均为静态库,acl是最基础的库,以C语言实现,其它库均依赖于该库; acl_cpp库用C++封装了acl库,提供给C++程序调用。链接错误集中表现为acl_cpp库引用了...

weixin_39755952的博客 485

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

链接静态库的顺序问题

在链接静态库时,如果多个静态库之间存在依赖关系,则有依赖关系的静态库之间存在顺序问题,这个在使用静态库时,需要注意,否则会报符号找不到问题,举例: libb.a依赖于是liba.a,而可执行文件test只直接依赖于libb.a,则链接选项应当为: -b -a,而不是-a -b,否则会报liba.a中的某些符号找不到. gcc -c a.c ar cr...

weixin_33709219的博客 250

简述C语言中的符号和链接库

linux-C的符号和elf文件结构

qq_42716357的博客 280

Linux下链接静态库的顺序问题

Linux下链接静态库的顺序问题 在链接静态库时,如果多个静态库之间 存在依赖关系,则有依赖关系的静态库之间存在链接顺序问题。这在使用静态库时需要注意,否则会报符号找不到的链接错误。 例如: lib2.a 依赖于 lib1.a,而最终可执行文件 test 依赖于 lib2.a,则链接选项应为: -llib2.a -llib1.a,而不能反过来,否则会报 lib1.a 中的某些

SlimApp 1441

cmake静态编译以及安装带有opencv的静态库并调用

搞opencv的静态编译 静态编译就是说可以将你编译出来的可执行文件放到没有配置什么环境的电脑里,直接运行; 而动态编译则需要将用到的库文件放到相应位置,windows下将需要的库文件放到根目录即可,linux则需要放到系统路径中。 首先明确一点:想做自己写的程序的静态编译,例如写一个关于opencv的代码,首先需要将opencv库进行静态编译,网上有各种教程。windows上将opencv源码进行静态编译,然后通过对vs进行相应的简单配置,就可以生成静态编译的可执行文件。 linux上将opencv

xiachong27的博客 3230

linux程序链接时库依赖顺序

摘要:Linux链接器处理库依赖时遵循严格的顺序规则,核心原则是"依赖者在前,被依赖者在后"。静态库对顺序极其敏感,错误的顺序会导致未定义符号错误;动态库相对宽松但仍需注意顺序。循环依赖可通过重复指定库或使用--start-group/--end-group解决。最佳实践包括按依赖链排序、利用pkg-config工具以及避免循环依赖设计。理解链接器符号解析逻辑是解决依赖问题的关键。(149字)

bkspiderx的博客 1356

静态库和动态库链接那些事

事情源于: 两位同事进行连调时,A同事调用B同事的so, 运行了一会后直接出core了. 后来发现是B同事的so的结构体名和A同事的类名冲突了. 静态库 测试程序很简单如下: libA.h #ifndef __LIBA_H__ #define __LIBA_H__ ...

chenqunan3231的博客 157

静态库链接顺序详解:从undefined reference到彻底解决

在C/C++工程开发中,编译链接是构建系统的核心环节,而静态库的链接顺序问题常令开发者困扰。当代码中引用外部函数时,链接器会按照命令行中目标文件和库的排列顺序,从左到右进行符号解析与提取。如果依赖库出现在引用库的左侧,就会触发undefined reference错误,即使库文件存在且符号表正确也无法避免。理解链接器的按需提取与符号表单向更新机制,是定位并解决此类问题的关键。通过合理规划链接参数、利用GCC/Clang的分组参数或CMake的target依赖传递,可有效处理单层依赖与循环依赖场景。在大型项目

weixin_42554151的博客 227

静态库、动态库,dll文件、lib文件,隐式链接、显式链接理解

原博地址: 静态链接、动态链接 静态库和动态库分别应用在静态链接方式和动态链接方式中,所谓静态链接方式是指在程序执行之前完成所有的链接工作,把静态库一起打包合入,生成一个可执行的目标文件(EXE文件)。所谓动态链接方式是指可执行目标文件在执行过程中才去加载调用相关功能函数,即在需要时才按需调用,是动态使用的。 静态库、动态库、隐式链接和显示链接中操作对象都是库,那么什么是库? 库 库...

Breeze 409

链接、装载和库看完这个系列就够了(二)(静态库链接顺序问题续)

单个.o链接生成静态库 让我们来继续深入的了解一下静态库的链接问题,我们把函数在每个静态库中再添加一个函数,同时修改一下Makefile: //lib_a1.c #include "lib_a1.h" int a1_fun() { return 0; } int a1_fun2() { return 0; } //lib_a2.c #include "lib_a2.h" #include "lib_a1.h" int a2_fun() { a1_fun

赵凯月的博客 296

Linux动态库静态库总结

如:gcc main.cpp -L. -Wl,-Bdynamic -lmydynlib -Wl,-Bstatic -lmystclib -Wl,-Bdynamic。g++ main.cpp -o app -L/path/to/libs -l:mylib.a # 显式指定静态库文件名。静态链接 g++ main.cpp -o app_static -L/home/user/libs -lmath。如果同时存在同名静态库(.a)和动态库(.so),链接器会优先选择动态库(除非显式指定使用静态库)。

shellching的专栏 545
上一篇: OpenC 仿射变换
下一篇: C++ 实现设计模式 -- 工厂模式
NeilZhy
博客等级 码龄11年 175粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值