其实符号这个概念,有点底层功底的程序员都应该晓得。其实就是标志的意思。比如说,标志属性(变量),一个行为(函数)或者其他。

在linux下编译,时间长了,一定会遇到使用【nm】【ldd】【readelf】的时候。

不扯淡了,直接进入到今天的正题。你跟着这边文章看下来,你应该可以学会下面几点:

1,dlopen可能比-llibrary的编译更靠谱。(我也不知道为什么)

2,dlopen不能打开【还存在未定义符号】的动态库

3,类什么时候会报未定义

好了,我们直接切入主题:

工程介绍

1,1.h 1.cpp ==> 1.so

2,main.cpp ===> main(采用动态加载动态库的技术)

代码

1.h

class A
{
public:A();~A();
}
extern "C"
{A* GetAddr(){return new A();}
};

1.cpp

A::A()
{}

注意:我没有实现析构函数。

你可以编译成1.so

main.cpp

#include <dlfcn.h>#include "1.h"int main()
{void* module = dlopen("./lib1.so", RTLD_LAZY);if (module == NULL){cout << dlerror() << endl;}return 0;
}

编译的时候指定-rdynamic -ldl -fPIC

好啦~

你应该在运行的时候报A这个类符号未定义。
使用nm看看lib1.so吧,发现果然A这个符号是U型的
参考 http://blog.csdn.net/wusoule/article/details/11770149

到此为止,你应该明白了

2,dlopen不能打开【还存在未定义符号】的动态库

3,类什么时候会报未定义

至于第一点,我弄清楚了再说。

linux编译符号那些事儿相关推荐

  1. linux 编译符号 u,Linux下缩小可执行程序 (一) 非使用符号的去除

    作者: Sam (甄峰) Sam在程序开发中,经常要用到多层库嵌套. Sam常在想,一些底层库的符号(symbols),在上层库乃至应用程序中并非全部要使用到.如果这些符号(symbols)实现一层层 ...

  2. 如何对linux文件进行编译,linux编译和执行命令都有哪些?该如何实现?

    我们知道,Linux是比如手机.平板电脑.路由器.台式计算机计算机设备的核心,它们都使用着Linux系统.以现在来说,一个合格的开发者必须要对Linux有一定的了解,那么,下面就跟小编一起来看看Lin ...

  3. linux编译.o文件,使用-O0编译Linux内核

    文章目录 1. 编译内核 1.1. 修改gcc优化等级 1.2. 防止`modpost: Section mismatches detected.`错误 1.3. 根据需要编译内核 1.4. 修改子目 ...

  4. Linux编译时如何减小so库文件的大小

    Linux编译时如何减小so库文件的大小 今天问了我这个问题,我就顺便记录一下.客户问为什么libc.so文件再编译前和编译后的size不一样啊,staging 和 compile 两个dir下的 l ...

  5. Linux内核符号表

    一,什么是符号(Symbols)?     什么是Symbol?  其实就是kernel中的变量(Variable Name)或函数名称(Function Name),     这样可以方便程序员在写 ...

  6. 初试linux编译(ubuntu+vim)+玩转智能蛇

    一.初试linux编译(ubuntu+vim) 步骤: ①下载vmware15+ubuntu桌面版映像 ②安装ubuntu ③下载vim+gcc 在ubuntu终端输入: sudo apt-get i ...

  7. linux 编译c_含有CGO代码的项目如何实现跨平台编译

    目前小菜刀的项目中需要用到SQLite数据库,https://github.com/mattn/go-sqlite3支持database/sql接口,采用Go的标准接口有利于项目后续扩展,因此选择了该 ...

  8. linux 编译链接过程,编译程序 一:linux程序编译过程(一)-编译和链接

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  9. linux下运行yolo,deepin(linux)编译安装yolo v4测试效果

    # 背景 五一放假的最后一天我也凑了个热闹,试一下新鲜出炉的yolo v4, 由于没有装CUDA和CUDNN,只试了一下在CPU上的速度和效果,电脑环境及编译依赖如下: * deepin 15.11桌 ...

最新文章

  1. JAVA API 中文文档 下载
  2. Hbase高级应用:建表高级属性、行键设计、设计原则、热点问题
  3. SAP Spartacus B2B 页面 Disable Confirmation 对话框的显示原理
  4. 交华为换机access配置_华为交换机VLAN内Proxy ARP配置示例
  5. (STL,set,priority_queue)丑数
  6. jquery.form.js java_教javascript函数和jquery函数的使用$(form).submit(function()
  7. 在Linux上进行动态注入 | LD_PRELOAD
  8. 《变革中的思索》连载九:放飞的爱——母亲和我
  9. linux常用下载工具
  10. 多媒体课件利用计算机开发工具将,多媒体课件设计与制作教程PPT演示课件
  11. 和风天气OUC——通过搜索城市快速查询天气
  12. java面经_Java面经
  13. python实现——根据MD5进行文件去重
  14. MySQL分库分表及中间件Mycat
  15. 移动硬盘安装manjaro 20.2以及常用软件安装
  16. 计算机所有以太网适配的ip,Win10电脑以太网没有有效的ip配置怎么解决?附上具体解决方法...
  17. 深入解析Tensor索引中的Indexing Multi-dimensional arrays问题
  18. uni-app的使用分享(一)
  19. 解决“无法启动此程序,因为计算机中丢失VCRUNTIME140.dll,尝试重新安装此程序以解决此问题”方案合集
  20. 按照日期:蓝桥杯真题、洛谷题单、力扣题单汇总

热门文章

  1. 基于51单片机的电子时钟设计
  2. 史上最强ASR非特定人声语音识别模块,完爆LD3320
  3. 一个挑战 ViT,MLP-Mixer 的新模型 ConvMixer:Patches Are All You Need? [Under Review ICLR 2022]
  4. ApiPost接口测试的用法之------Post
  5. nest中文文档_如何将Nest Cam事件记录到Google文档电子表格
  6. Pinyin4j导读
  7. 【python量化交易学习】从tushare获取股票交易数据,存入后再从mysql或excel读取数据,筛选股票,用pyecharts画出K线图。
  8. input[type=file]如何屏蔽“未选择任何文件”
  9. 你真的理解了const和volatile关键字么?(我看不一定)
  10. skynet设计原理和使用