动/静态库编译报错集锦

LINUX下动态链接库dlopen dlsym dlclose函数使用说明 编译时候要加入 -ldl (指定dl库) dlopen 基本定义 功能:打开一个动态链接库 [喝小酒的网摘]http://blog.const.net.cn/a/17154.htm 包含头文件:  #include   函数定义:  void * dlopen( const char * pathname, int mode );  函数描述:  在dlopen的()函数 阅读详情

1.【静】error adding symbols: DSO missing from command line

大概也是调调包的调用顺序就好了

2.【动】undefined reference to symbol 'dlclose@@GLIBC_2.2.5'

有人说加个-ldl即可.这个某些情况下是对的. 不过还有另外的情况

20220519这一天,我用-ldl解决了问题. 

如果你的程序中使用dlopen、dlsym、dlclose、dlerror 显示加载动态库,需要设置链接选项 -ldl
加载动态链接库,首先为共享库分配物理内存,然后在进程对应的页表项中建立虚拟页和物理页面之间的映射。
你可以认为系统中存在一种引用计数机制, 每当一个进程加载了共享库(在该进程的页表中进行一次映射),引用计数加一;
一个进程显式卸载(通过dlclose等)共享库或进程退出时,引用计数减 一,
当减少到0时,系统卸载共享库。
(1)打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。
(2)取函数执行地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。
(3)关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle); dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。
(4)动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。

3.【动含静】今晚遇到一个很奇怪的bug

如果我用同事给我的静态库 libcrypto.a能编译过但是一跑就会挂掉,但是用动态连接就不会挂掉,这个是为啥?z总说, libcrypto.a依赖于编译 libcrypto.a的环境,跑到我的环境上来了之后不适用了?头疼

4.学习LD_PRELOAD

LD_PRELOAD作用

5.__attribute__ ((visibility("default")))

-fvisibility=default|internal|hidden|protected,gcc的visibility是说,如果编译的时候用了这个属性,那么动态库的符号都是hidden的,除非强制声明。

屏蔽静态库中某些函数的方法---代码前加__attribute__ ((visibility ("default"))),gcc编译加-fvisibility=hidden.

gcc 编译引用库时注意相互引用的顺序 g++ test.o -L/home/hejw/LLVM/clang+llvm-3.4-x86_64-unknown-ubuntu12.04/lib -ldl -lz -lrt -lm -lLLVMInstrumentation -lLLVMIRReader -lLLVMAsmParser -lLLVMDebugInfo -lLLVMOption -lLLVMLTO -lLLVMLinker -l 阅读详情

相关推荐

【Script系列】makefile的override指示符与gcc -ldl选项作用

DATE: 2019-2-20【Tag:工程项目总结】 1、参考 2、makefile中override指示符释义 3、gcc -ldl 选项作用

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 1239

Linux C++ g++ -ldl编译参数(链接libdl.so动态库,头文件<dlfcn.h>)(Dynamic Linker的缩写)(混链接、混合链接)

libdl是一个操作系统级别的库(不是C++标准库也不知第三方库,它由操作系统提供),用于在程序运行时动态地加载共享对象文件(shared object),并获取其中定义的符号(symbol)并进行调用。dlfcn.h 头文件是用于使用动态链接库的函数的标准头文件,而 dlopen,dlsym,dlclose 等函数是实际的函数符号,它们在 Unix 系统上定义在 libdl.so 库文件中。当使用-l选项指定库时,链接器将首先尝试链接动态库,如果无法找到动态库,则尝试链接静态库。选项,则默认链接动态库。

Dontla的博客 7408

【BlueZ】源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战

本文深入解析BlueZ源码编译的全流程,重点解决嵌入式平台定制化落地的技术难点。文章首先分析为什么必须从源码编译BlueZ(版本滞后、功能裁剪、二次开发需求),详细讲解源码目录结构与编译产物对应关系。然后提供两大编译场景的完整指南:Linux桌面环境原生编译流程(依赖安装、configure参数详解、安装验证)和ARM平台交叉编译(依赖库层级处理、pkg-config配置、板端部署)。特别针对嵌入式场景提供了最小系统裁剪方案、静态编译技巧及全流程排错方法论。

byte轻骑兵的技术小窝 1万+

gcc -ldl 选项作用

如果你的程序中使用dlopen、dlsym、dlclose、dlerror 显示加载动态库,需要设置链接选项-ldl 加载动态链接库,首先为共享库分配物理内存,然后在进程对应的页表项中建立虚拟页和物理页面之间的映射。 你可以认为系统中存在一种引用计数机制, 每当一个进程加载了共享库(在该进程的页表中进行一次映射),引用计数加一; 一个进程显式卸载(通过dlclose等)共享...

dongbi0665的博客 1380

【医学影像】之GDCM库编译(windows环境)与简单使用

gdcm库在windows上编译,并在C++中使用其读取dicom文件,解析tag数据

专注GIS开发 1526

详解C++开源网络传输库libcurl的编译过程

详解C++开源网络传输库libcurl的编译过程

dvlinker的技术专栏 480

WINCE PB编译不过各种错误集锦

欢迎访问www.sinlinx.com 本文将不择手段搜集WINCE PB的各种编译不过的错误并给出解决方案或是相关思路,搜集资料来源:本人编译出错后得到解决后的学习笔记,网上搜集的资料,朋友的教导等,后面将会详细备注,大家一起交流.     一:不能sysgen,sysgen变灰色     检查BSP包的命名,所建工程的命名是否正确!     二:*(LPDWORD) OEMMapMem

S5PV210开发板-保定芯灵思 984

使用Process Explorer、Dependency Walker和PE信息查看工具快速排查定位DLL动态库版本不一致导致加载失败的问题

本文详细讲述如何使用Process Explorer、Dependency Walker和PE信息查看工具快速排查定位DLL动态库版本不一致导致加载失败的项目实战问题。

dvlinker的技术专栏 1万+

错误集锦

1. ld: file is universal (3 slices) but does not contain a(n) armv7s slice: /Users/yangares/Desktop/二维码/ZBarSDK/libzbar.a file '/Users/yangares/Desktop/二维码/ZBarSDK/libzbar.a' for architecture ar...

aosang3114的博客 261

别再调参了!用Simulink手把手教你搞定FOC电机速度环PI控制器(附模型下载)

本文详细介绍了如何使用Simulink搭建FOC电机速度环PI控制器,通过模最优准则和系统化调试方法,避免传统手动调参的繁琐过程。文章包含从传递函数推导到参数自动整定的完整流程,并提供了实战调试技巧与异常处理指南,帮助工程师快速实现电机控制系统的稳定运行。

weixin_42519985的博客 415

FastAdmin框架Token验证实战:从登录到API调用的完整流程

本文详细解析了在FastAdmin框架中实现Token验证的完整流程,从数据表设计、登录接口签发Token,到核心验证中间件的编写与路由配置,并探讨了在业务API中的调用与安全实践。内容涵盖Token生成策略、有效期管理及安全增强措施,为开发者提供了一套可落地的API身份验证解决方案。

nnn11的博客 917

Xcode编译错误集锦

1、在将ios项目进行Archive打包时,Xcode提示以下错误: [BEROR]CodeSign error: Certificate identity ‘iPhone Distribution: ***.’ appears more than once in the keychain. The codesign tool requires there only be one.原因:那么出现...

weixin_30247307的博客 184

ANSYS APDL生死单元实战:焊接模拟从入门到精通(附完整命令流)

本文详细介绍了使用ANSYS APDL进行焊接模拟的核心技术——生死单元法。通过一个完整的平板对接焊案例,从原理剖析、模型搭建、命令流编写到移动热源施加和后处理,手把手指导工程师掌握这一动态仿真方法,有效预测焊接过程中的温度场、残余应力与变形。

k6l7m8n9的博客 151

iOS开发之一些错误集锦

######No1. NSAutoreleasePool’ is unavailable: not available in automatic reference counting mode 答:根据Objective-C 2.0程序设计上的旧版本的代码会发生NSAutoreleasePool’ is unavailable: not available in automatic referen...

Simona_1973的博客 390

LS-DYNA壳单元冲击仿真中的5个关键设置:以方管碰撞为例(含沙漏控制参数)

本文以方管碰撞为例,深入解析了LS-DYNA壳单元冲击仿真中的五个关键设置。重点探讨了沙漏控制参数(如IHQ=4)的选择逻辑、自接触算法优化、能量监控方法、材料模型(MAT_24)的真实应力-应变曲线与应变率效应设置,以及单元公式的选取。这些核心设置共同决定了仿真的精度与效率,是确保方管冲击仿真结果可靠性的基石。

salt的博客 625

【最全选型攻略-盘点篇】市面上有哪些靠谱的工业3D相机品牌?(双目、结构光、TOF、激光三角)

选工业3D相机,选最靠谱的品牌,选最Match你的产品,看这一篇就够了!

jiqishijueyingdi的博客 1万+

2021-11-25牛客网项目第一章——Linux系统编程入门

1.1Linux开发环境搭建 1)Linux虚拟机的配置 2)Xshell、Xftp、vscode与Linux虚拟机的连接 1.2GCC 1.3静态库的制作和使用 静态库制作的全过程 首先进入放置要制作成库的代码的原始文件。 使用gcc编译得到编译后的文件。 gcc -c add.c sub.c -I ../include/ -I指定编译的时候在上搜索include引用的文件 ar rcs libxxx.a xxx.o 前面是库的名字,后面是一系列制作库所使用的文件 参数大L是指定使用

weixin_51187533的博客 431

STEP 7-Micro/WIN SMART 编程软件:从入门到精通的使用指南

通过不断实践,熟悉软件的各项功能和操作技巧,工程师可更好地应对工业自动化控制中的各种挑战,开发出高效、稳定的控制程序。项目的基本组件是构成程序的核心元素,包括:程序块(主程序 OB1、子程序和中断程序)、数据块(给 V 存储器赋初值)、系统块(硬件组态和参数设置)、符号表(用符号代替存储器地址,使程序更易理解)以及状态图表(监视、修改和强制变量状态)。下载程序时,单击工具栏上的 “下载” 按钮,在弹出的下载对话框中选择要下载的块(程序块、数据块、系统块),单击 “下载” 即可。

电工 5573

ndk-build生成.so

ndk-build生成.so Gabo关注 https://www.jianshu.com/p/6323f519480f 设置NDK的编译选项 Application.mk 和 Android.mkAndroid NDK編譯選項設置 利用NDK生成.so可以通过Android Studio,也可以通过命令ndk-build来自己手动生成。 这里讲一下用ndk-build手动生成的过程 ...

优秀技术文章收录 2246

12-RK平台U-Boot启动流程

先看概述,把这一章要回答的问题摆出来,带着问题听。RK 特有的 BootROM -> MiniLoader -> SPL -> U-Boot -> Kernel。这是因为 RK 平台使用闭源的 DDR 初始化固件,需要通过 MiniLoader 来加载和运行。为什么多一层?这是 RK 平台的特殊性决定的。RK 平台使用闭源的 DDR 初始化固件,这段代码 Rockchip 不开源,只能以二进制形式提供,它需要一个载体来加载和运行,这个载体就是 MiniLoader。

内核笔记 1147

你以为你懂 Java 反射?看了这篇源码分析,我发现我以前都错了

摘要:本文讲述了一次生产环境Metaspace内存溢出的故障排查经历。事故源于一个通用数据导出功能中频繁使用反射调用method.invoke(),触发了JVM的"膨胀机制":当同一Method对象调用超过15次时,JVM会动态生成GeneratedMethodAccessor类,导致Metaspace被撑爆。文章分析了问题根源在于循环中反复调用getMethods()创建新Method对象,并提出了三种解决方案:缓存Method对象、改用MapStruct/MethodHandle工具

BUG猿的博客 770

PCL安装常见的错误集合解决方案(一)

常见的错误集合解决方案(一)No.1提示错误'Microsoft.VC90.CRT,version="9.0.21022.8"把Microsoft.NET Fra...

点云PCL 1万+

WINCC7.3破解文件

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

node 调用 node-ffi 的插件 ffi-napi 遇到的问题合集

这个功能十分有用处,因为在C++出现以前,很多代码都是C语言写的,而且很底层的库也是C语言写的,为了更好的支持原来的C代码和已经写好的C语言库,需要在C++中尽可能的支持C,因此 extern “C” 就变成了一个必然的选择。接下来,就是使用 ffi-napi 导出dll动态库中的需要用到的方法,需要注意的是导出的声明语句要和dll动态库中C++方法的名字、参数表、返回值一致。就是说生成的C++的dll动态库有问题,一般是因为没有导出方法的符号,所以调用dll的时候找不到对应的方法。

qq_28586119的博客 1384

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 玩具版本~~
下一篇: 如何用同名函数覆盖掉标准库中的函数?
潇湘馆主人的粉丝
博客等级 码龄9年 526粉丝 951原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值