解决undefined reference to symbol ‘ceil@@GLIBC_2.2.5这类问题的方法

Linux下编译cppunit时出现‘undefined reference to `dlclose‘错误 在Linux环境下编译cppunit时,有时候会遇到类似于"‘undefined reference to `dlclose’"的错误。这个错误通常是由于链接器无法找到正确的库文件所导致的。原因是在链接cppunit时,需要使用到动态链接器的函数,而链接器默认不会自动链接这些函数所在的库文件。这样编译器就能找到并链接这些库文件中定义的符号,从而解决了’undefined reference to `dlclose’错误。要解决这个问题,我们需要在编译命令中添加正确的库文件参数。在上面的命令中,我们使用了。 阅读详情

例子如下:

#include <unordered_map>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    unordered_map<string,double> coll { { "tim", 9.9 },  { "struppi", 11.77 }};
    
    // square the value of each element:
    for (pair<const string,double>& elem : coll) {
        elem.second *= elem.second;
    }

    // print each element (key and value):
    for (const auto& elem : coll) {
        cout << elem.first << ": " << elem.second << endl;
    }
}

执行:

gcc test.cpp -o test -lstdc++ -std=c++14

编译报如下错误!

/usr/bin/ld: /tmp/ccImiJor.o: undefined reference to symbol ‘ceil@@GLIBC_2.2.5’
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

报错说,未能识别ceil这个标识,虽然我们并没有显式调用ceil这个函数,但事实程序在编译时需要对**unordered_map<string,double> coll { { “tim”, 9.9 }, { “struppi”, 11.77 }};**调用这个函数。
gcc 编译时增加 -lm 选项,这样程序就能引用 libm.so(libmath) 库了。因为书序函数是位于libm.so 库文件中的,-lm 选项告诉编译器书序函数要到这个库文件中查找。

cmath是c++语言中的库函数,其中的c表示函数是来自c标准库的函数,math为数学常用库函数。编译时必须加上参数「-lm」(表示连结至数学函式库)。

再次执行:

gcc test.cpp -o test -lstdc++ -std=c++11 -lm

编译通过!!

总结下,对于这类错误,只需要依葫芦画瓢,找到对应的库标识,编译的时候加上就好了。

如果不想存在这种隐式的转换,可以按照下面的方式实现:

#include <unordered_map>
#include <string>
#include <iostream>
using namespace std;

int main()
{
    unordered_map<string,double> coll;
    coll.insert( { { "tim", 9.9 }, { "struppi", 11.77 } });
    // square the value of each element:
    for (pair<const string,double>& elem : coll) {
        elem.second *= elem.second;
    }

    // print each element (key and value):
    for (const auto& elem : coll) {
        cout << elem.first << ": " << elem.second << endl;
    }
}

执行如下编译通过:

gcc test.cpp -o test -lstdc++ -std=c++14

CAD的.dwg文件导入 ArcGIS:高程分析、坡度分析、坡向分析 CAD的.dwg文件导入 ArcGIS,再进行高程分析、坡度分析、坡向分析。 阅读详情

相关推荐

系统安装、qt配置、安装pcie驱动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 安装Linux系统指定:ununtu20.04并配置相关软件环境 前言 提示:这里可以添加本文要记录的大概内容: ununtu20.04、Qt 5.9.0、pcie驱动 提示:以下是本篇文章正文内容,下面案例可供参考 一、安装系统 制作系统盘(win10),在开机时按相应键进入BIOS,(华硕需要先改配置启动->CSM->开启->第一个选项选第一个或第二个),等待即可 进入后按照https://www.sysgeek.

weixin_44832804的博客 2204

undefined reference to symbol ‘dlsym@@GLIBC_2.2.5‘

Makefile 文件中添加 -ldl 链接上行。c++ 项目中,使用so插件方式完成业务逻辑。

sinat_22706095的博客 1218

vsomeip3 双机通信文件配置

验证环境 vsomeip地址Android运行命令,红色的地方需要和配置文件一样Linux运行命令,红色的地方需要和配置文件一样Linux service配置文件 ,红色的地方需要更改Android client配置文件,红色的地方需要更改,蓝色的地方可不要 ...

m0_37132481的博客 5222

11 --> openWRT 编译 CLI 包错误 undefined reference to symbol ‘dlsym@@GLIBC_2.2.5‘

本篇博客记录 编译 OpenWRT x86-64 的sysupgrade 包出错解决方法,备忘记录。 增加 Attended sysUpgrade 包,make menuconfig -> Base system --> <*> auc............ Attended sysUpgrade CLI (EXPERIMENTAL) 编译出错信息如下: ....... [100%] Linking C executable auc /home/robot/OpenWr

weixin_38387929的博客 1786

RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo

本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。

mac99的博客 1149

VMvare 桥接模式无法联网、没有未桥接的主机网络适配器,无法将网络更改为桥接状态。

很多程序员,整天沉浸在业务代码的 CRUD 中,业务中没有大量数据做并发,缺少实战经验,对并发仅仅停留在了解,做不到精通,所以总是与大厂擦肩而过。我把私藏的这套并发体系的笔记和思维脑图分享出来,理论知识与项目实战的结合,我觉得只要你肯花时间用心学完这些,一定可以快速掌握并发编程。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!战项目源码讲义》点击传送门即可获取!**

q16974058的博客 4330

undefined reference to 链接错误

原因今天编译一个C文件,输入下面的代码后GOP12.c文件代码大致为#include #include #include int main(int argc,char *argv[]) { //某个地方用到了数学函数 } GCC编译该文件gcc -o gop12 GOP12.c 出现错误/tmp/ccGjWwZ6.o: In function `main': GOP12.c:(.text+0x346): undefined reference to `ceil' GOP12.

悟北——————为梦想飞翔 2438

ADS 2024实战:手把手教你搞定2.3-3.5GHz宽带Doherty功放仿真与版图(附源文件)

本文详细解析了在ADS 2024环境中实现2.3-3.5GHz宽带Doherty功放的全流程设计,包括仿真与版图实现。从软件环境搭建、器件模型导入到核心电路设计、匹配网络优化,再到系统集成与版图生成,提供了实战技巧和关键参数设置。特别针对5G通信和卫星应用中的高效率需求,展示了如何通过ADS 2024的新功能提升设计效率。

weixin_42639246的博客 460

Linux环境编译时报错/lib64/libdl.so.2: could not read symbols: Invalid operation

1、问题描述 Linux环境编译时报错 /usr/bin/ld: /home/src/lib***.so: undefined reference to symbol 'dlsym@@GLIBC_2.2.5' /usr/bin/ld: note: 'dlsym@@GLIBC_2.2.5' is defined in DSO /lib64/libdl.so.2 so try adding it

juan131006的博客 8547

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

本文给出了GTM与EVADC之间关联的细节,并通过两个实例分别说明了如何对寄存器进行配置。

无所适从的我的博客 2931

YOLOv5源码逐行超详细注释与解读(2)——推理部分detect.py

全网最详细的YOLOv5之推理部分detect.py源码逐行注释,近四万字的超详细讲解!小白入门必看!

路人贾的博客 5万+

GCC 中 undefined reference to ‘ceil’ collect2:ld returned 1 exit status 错误

当我们用gcc编译一个c文件时,如果用到了math.h中的一些数学函数,例如:ceil(),floor()等,可能会出现如下错误: undefined reference to ‘ceil’   collect2:ld returned 1 exit status 主要是因为使用math.h中声明的库函数时,gcc命令行必须加-lm选项,如果没有加就会出现上面的错误,原因在于数学函数位于li

xushuxuan 1万+

把 SM30 用顺:从表设计到权限与传输,全面掌握 SAP Table Maintenance Generator

摘要 SAP的Table Maintenance Generator(TMG)是为配置表维护需求设计的经典工具,能够生成标准化的维护对话框(SM30)。它支持单表、维护视图(多表关联)和视图簇(导航式维护)三种维护对象类型。使用TMG前需注意三个关键设置:1)表维护权限选项;2)交付类(决定数据传输行为);3)客户端字段配置。通过SE54/SE11生成维护对话框时,需选择维护类型(一步/两步)和记录例程(控制传输)。TMG生成的对象包含函数组、屏幕和处理模块,但部分标准框架不可修改。实际应用中,可通过参数事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 176

Cmake运行报错:undefined reference to symbol ‘dlclose@@GLIBC_2.2.5‘

【代码】undefined reference to symbol ‘dlclose@@GLIBC_2.2.5‘

dengfuma的专栏 777

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ubutun上编译出现undefined reference to symbol ‘dladdr@@GLIBC_2.2.5‘的错误

undefined reference to symbol 'dladdr@@GLIBC_2.2.5'错误的解决办法。

clever101的专栏 1989

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

nmealib库编译提示 undefined reference to `ceil‘

可以看到 LIBS 已经包含了 lm。目前的报错该怎么解决呢?数学相关的库,说是链接需要添加。官方的 Makefile 文件。再次编译,官方工程编译成功。网上搜索,因为使用了。

weixin_46158019的博客 802

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

undefined reference to symbol ‘pow@@GLIBC_2.2.5 编译错误解决方法

解决方案:gcc编译时增加 -lm选项,这样程序就能引用libm.so(libmath)库了。 该错误的含义并不是glibc库的错误,而是pow符号未定义, pow是数学中的求幂函数,也就是说,如果我们在C文件中引用了 math.h ,那么在使用gcc编译时,必须添加 -lm选项,因为书序函数是位于libm.so库文件中的,-lm选项告诉编译器书序函数要到这个库文件中查找。 ...

猪哥的专栏 1万+

libevent 报 undefined reference to `getrandom‘

/home/sec/xxx/serviced/libs-x86/libevent.a(evutil_rand.o): In function `arc4_seed_getrandom': /home/xxx/open_src/libevent-2.1.12-stable/./arc4random.c:188: undefined reference to `getrandom' collect2: error: ld returned 1 exit status 主要原因是libevent.a 是在一台.

好习惯成就伟大 2168

undefined reference to symbol xx@@GLIBC_2.2.5

我在编译A库的时候依赖了其他的B静态库,出现此问题,当A库编译为静态库时无报错,当A库编译为动态库时报错。

qq_42541521的博客 1120

undefined reference to symbol ‘dlsym@@GLIBC_2.4‘ 解决

下面来看一下我编译时报错的信息 下面我再给出一个代码,大家运行一下 #include <stdio.h> void test(void) { printf("Hello World"); } //保存以.c文件,并且以gcc -fPIC --shared a.c -o liba.so 运行 下面再运行一个代码 #include <stddef.h> #include <dlfcn.h> int main(void) { void *handle =

努力学习 1万+

linux undefined reference to symbol 'floor@@GLIBC_2.2.5'

这个是因为GNU make版本不一致导致,最后加上-lm g++或者gcc -o main main.c -lm 如果还存在问题 需要加上-Wl,--no-as-needed g++或者gcc -Wl,--no-as-needed -o main main.c -lm 转载于:https://www.cnblogs.com/zhangdewang/p/8617666.htm...

aizhangque5011的博客 2351

golang调用c++代码出现undefined reference to symbol ‘XX@@GLIBC_2.2.5‘

golang调用C++代码时,部分实现的底层函数,floor, log,exp等出现异常,如下 /usr/bin/ld: xxxxx.a: undefined reference to symbol 'floor@@GLIBC_2.2.5' /usr/bin/ld: note: 'floor@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line /lib64/libm.so

Jum_Summer的博客 3269

undefined reference to symbol ‘dlclose@@GLIBC_2.2.5‘

解决dlclose cmake报错

蓝羽飞鸟的博客 2021

解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'

  错误如下: /usr/bin/ld: /usr/local/lib/libavcodec.a(cuviddec.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5' /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libdl.so: error adding sy...

柳鲲鹏 2万+
上一篇: C++标准库学习笔记——标准模板库笔记
下一篇: array、vector中data()成员函数的用法
杂质想当杂志
博客等级 码龄10年 13粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值