符号函数

ELF文件格式解析

核能气质少年 提交于 2020-03-26 09:36:47
copy from : https://blog.csdn.net/mergerly/article/details/94585901 1. ELF文件简介 首先,你需要知道的是所谓对象文件(Object files)有三个种类: 可重定位的对象文件(Relocatable file) 这是由汇编器汇编生成的 .o 文件。后面的链接器(link editor)拿一个或一些 Relocatable object files 作为输入,经链接处理后,生成一个可执行的对象文件 (Executable file) 或者一个可被共享的对象文件(Shared object file)。我们可以使用 ar 工具将众多的 .o Relocatable object files 归档(archive)成 .a 静态库文件。如何产生 Relocatable file,你应该很熟悉了,请参见我们相关的基本概念文章和JulWiki。另外,可以预先告诉大家的是我们的内核可加载模块 .ko 文件也是 Relocatable object file。 可执行的对象文件(Executable file) 这我们见的多了。文本编辑器vi、调式用的工具gdb、播放mp3歌曲的软件mplayer等等都是Executable object file。你应该已经知道,在我们的 Linux 系统里面,存在两种可执行的东西

C++(四十四)之函数调用符

南楼画角 提交于 2020-03-16 18:13:50
本篇我们主要讲解函数符号的重载。 函数符号(),那么他的重载有什么用呢。 目前我们先了解到,函数符号可以用来做仿函数就可以了。 下面我们举例说明一下: /**************************************************** * brief : ()函数符重载 * author : shao * date : 2020-03-13 * note : 要注意的是,仿函数和构造函数 * 在调用时候的区别。 * ****************************************************/ #include <iostream> using namespace std; class Add{ public: int val1; int val2; Add(int v1, int v2) { this->val1 = v1; this->val2 = v2; } Add(int a) { this->val1 = a; } /* * 这里对函数调用符号进行重载, * 方面后面对象可以直接调用()符号 * 可以用对象直接写仿函数的形式, * 这里只是写了一个int个例, * 用户可以根据不同的要求写出不同的类型 */ int operator()(int a, int b) { return a + b; } }; void

Qt 添加 QtNetwork 库文件

♀尐吖头ヾ 提交于 2020-03-16 05:45:55
Qt应用程序默认没有加QtNetwork库。如下图: 在开发过程中,因处理业务需要手动添加QtNetwork库。根据常见情况分为以下两种: 【1】若使用QTCreator开发程序 在工程的pro文件中添加:QT += network 【2】若使用VS + QT开发程序 本地环境VS2017 + QT5.9.2 编译错误提示如下: 1 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QNetworkRequest::QNetworkRequest(class QUrl const &)" (__imp_??0QNetworkRequest@@QEAA@AEBVQUrl@@@Z),该符号在函数 "public: void __cdecl UPCLoginService::execute(void)" (?execute@UPCLoginService@@QEAAXXZ) 中被引用 2 error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QNetworkRequest::~QNetworkRequest(void)" (__imp_??1QNetworkRequest@@QEAA@XZ),该符号在函数 "public: void _

Matplotlib学习笔记

两盒软妹~` 提交于 2020-03-15 05:57:05
示例图: https://matplotlib.org/tutorials/introductory/sample_plots.html#sphx-glr-tutorials-introductory-sample-plots-py 自定义Matplotlib: https://matplotlib.org/tutorials/introductory/customizing.html#sphx-glr-tutorials-introductory-customizing-py 图像教程: https://matplotlib.org/tutorials/introductory/images.html#sphx-glr-tutorials-introductory-images-py 画廊: https://matplotlib.org/gallery.html 使用指南 matplotlib拥有广泛的代码库,大多数都可以通过一个相当简单的概念框架和一些重要知识来理解 绘图需要在一系列级别上进行操作。绘图包的目的是帮助尽可能轻松的可视化数据,并提供所有必要的控制。 因此matplotlib中所有内容都是按层次结构进行组织。顶部是matplotlib状态机环境。简单函数用于将绘图元素添加到当前图形的当前轴 层次结构下的是面向对象接口的第一级,其中pyplot仅用于少数功能

Nim各种pragma使用方法

六月ゝ 毕业季﹏ 提交于 2020-03-14 01:58:25
Pragmas(编译指示) 编译指示"{."为开始, ".}"为结束, ","号为分隔符, 例如{.cdecl, importc.} deprecated pragma (弃用(分解?)指示) deprecated指示用来标记为弃用. proc p() {.deprecated.} var x {.deprecated.}: char 也可以在声明时使用, 需要定义一个重命名列表. type File = object Stream = ref object {.deprecated: [TFile: File, PStream: Stream].} noSideEffect pragma (无副作用指示) noSideEffect指示用于标记proc(函数)/iterator(迭代器)为无副作用, 好象是在该函数里使用影响效率的函数或者修改某些变量内容就会出错, 如echo 未来的发展方向: func可能成为无副作用函数的关键字或语法糖(就是说以后更新正式版可能会加入func这个关键字来声明无副作用函数.) func `+` (x, y: int): int procvar pragma(过程变量指示) procvar指示用于标记函数, 让它可以被传递给一个过程(函数)变量. compileTime pragma(编译时指示)

c/c++连接mysql数据库

女生的网名这么多〃 提交于 2020-03-13 11:31:44
环境:win7 x64、vs2008、mysql 对于已经安装mysql的,查看mysql安装目录,如果安装目录下没有include和lib目录, 说明没有完全安装,需要下载mysql-connector类库,官方下载地址: http://dev.mysql.com/downloads/connector/c/ 部分截图如下,从图左侧可看出,官网提供了c、c++、Python、J等语言的链接库,根据个人情况下载。 下面开始配置vs2008,大致需要三步。 由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的头文件路径指向Mysql安装目录的同文件mysql.h所在的位置,将连接库路径指向libmysql.lib所在的路径, 这两个文件一般在include、lib目录下。 新建一个项目,右键该项目,选择属性,弹出属性对话框。 第一:将x项目属性页的C/C++->常规->附加包含目录指向mysql.h所在的位置:C:\Program Files\MySQL\MySQL Server 5.1\include 第二:将项目属性页的链接器->常规->附加库目录指向libmysql.lib所在的路径:C:\Program Files\MySQL\MySQL Server 5.1\lib. 第三:将链接器->输入->附加依赖项中添加libmysql

(转载)与调试器共舞

瘦欲@ 提交于 2020-03-10 16:46:26
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? NSNumber *n = @7; // 实际应该调用这个函数:Foo(); 或者短路一个逻辑检查? if (1 || theBooleanAtStake) { ... } 或者伪造一个函数实现? int calculateTheTrickyValue { return 9; /* 先这么着 ... } 并且每次必须重新编译,从头开始? 构建软件是复杂的,并且 Bug 总会出现。一个常见的修复周期就是修改代码,编译,重新运行,并且祈祷出现最好的结果。 但是不一定要这么做。你可以使用调试器。而且即使你已经知道如何使用调试器检查变量,它可以做的还有很多。 这篇文章将试图挑战你对调试的认知,并详细地解释一些你可能还不了解的基本原理,然后展示一系列有趣的例子。现在就让我们开始与调试器共舞一曲华尔兹,看看最后能达到怎样的高度。 LLDB LLDB 是一个有着 REPL 的特性和 C++ ,Python 插件的 开源 调试器。LLDB 绑定在 Xcode 内部,存在于主窗口底部的控制台中。调试器允许你在程序运行的特定时暂停它,你可以查看变量的值,执行自定的指令,并且按照你所认为合适的步骤来操作程序的进展。( 这里

字符串和格式化输入输出

人盡茶涼 提交于 2020-03-07 22:18:06
第四章 字符串和格式化输入/输出 4.1 前导程序 4.2 字符串简介 字符串(character string)是一个由一个或多个字符的序列,例如 "Good luck!" 其中双引号不是字符串的一部分,它用来告诉编译器它括起来的是字符串 4.2.1 char类型数组和null字符 C语言没有专门储存字符串的变量类型,字符串都被储存在 char 类型的数组中。数组是同类型元素的有序序列。 例如 G o o d l u c k ! \0 数组末尾的字符 \0 是空字符(null),C语言用它标记字符串的结束,它是非打印字符,它的ASCII码是0.C语言字符串一定以null结尾,意味着数组容量至少比待存储的字符数多1。 计算机在其中 自动处理 的细节有 创建数组 把字符串中的字符逐个放入数组 在末尾加上一个 \0 4.2.2 使用字符串 根据 %s 转换说明, scanf() 在遇到第一个空白(空格,制表符或换行符)时就自动停止,它只能读取一个单词,而非一整句话。 字符串和字符 字符’x’是基本类型 char ,由一个字符组成 x 字符串"x"是派生类型 char 数组,由两个字符组成 x \0 4.2.3 strlen() 函数 strlen() 和 sizeof 运算符的区别 sizeof 运算符,以字节为单位给出对象; strlen() 函数给出字符串中的字符长度,空字符不计入

计算符号函数的值

為{幸葍}努か 提交于 2020-03-05 22:53:35
对于任一整数n,符号函数sign(n)的定义如下: 请编写程序计算该函数对任一输入整数的值。 输入格式: 输入在一行中给出整数n。 输出格式: 在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。 输入样例1: 10 输出样例1: sign(10) = 1 输入样例2: 0 输出样例2: sign(0) = 0 输入样例3: -98 输出样例3: sign(-98) = -1 # include <stdio.h> # include <stdlib.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main ( int argc , char * argv [ ] ) { int n = 0 ; scanf ( "%d" , & n ) ; if ( n < 0 ) { printf ( "sign(%d) = %d" , n , - 1 ) ; } else if ( n == 0 ) { printf ( "sign(%d) = %d" , n , 0 ) ; } else { printf ( "sign(%d) = %d" , n , 1 ) ; } return 0 ; } 来源:

Linux模块

二次信任 提交于 2020-03-02 04:50:53
一、为什么要使用模块 由于linux使用的是整体结构,不是模块化的结构,整体结构实现的操作系统可扩展性差。linux为了扩展系统,使用了模块的技术,模块能够从系统中动态装入和卸载,这样使得linux也具有很好的可扩展性。 二、linux中哪些代码作为模块实现,哪些直接编译进内核? 当然我们是尽量把代码编译成模块,这样就可以根据需要进行链接,内核的代码量也会少很多。几乎所有的高层组件—文件系统、设备驱动程序、可执行格式、网络层等等—都可以作为模块进行编译。 然而有些代码确必须直接编译进内核。这些代码通常是对数据结构或者函数进行修改。如内核中已经定义好了的数据结构,如果要改变这个数据结构,那么只有从新编译内核了。 三、管理模块 内核主要完成管理模块的两个任务。第一个任务是确保内核的其它部分可以访问该模块的全局符号,模块还必须知道全局符号在内核及其它模块中的地址。因此,在链接模块时,一定要解决模块间的引用关系。第二个任务是记录模块的使用情况,以便再其它模块或者内核的其它部分正在使用这个模块时,不能卸载这个模块。 四、模块使用的数据结构 每个模块都用一个module描述符描述,并且链接到一个以modules变量为链表头的双向循环链表中。 module描述符: struct module { enum module_state state; //模块内部状态 struct list_head