一、so文件和exe文件这两种文件其实具有很多相似自出,或者说so文件是介于obj文件和exe文件的一种中间过渡形式,它虽然不能直接运行(但是经过特殊编写的so文件内核是支持加载运行的,例如ld.so),但是具有了自己的一些更为高级的内容,例如一些初始化节,got表等内容,虽然孱弱,但是它具有了更加 ...
分类:
系统相关 时间:
2019-03-06 21:56:45
阅读次数:
211
go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]。想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][1]: 首先得装一个 windows 下的 gcc 开发环境,我用了 [msys2][3] 。 首先 ...
1.首先以 release 方式编译源代码,然后将生成的a. exe 程序放到一个单独的文件夹中。 2.再从开始菜单打开 Qt 命令行工具。 3.在命令行中,进入到第一步中a. exe 程序所在的文件夹。 4.再使用 Qt 自带的 windeployqt 工具命令 windeployqt a.exe ...
分类:
其他好文 时间:
2019-02-24 00:59:05
阅读次数:
330
函数库分类函数库按照链接方式可分为 1、静态链接库 2、动态链接库 函数库 -存放位置 Linux应用程序使用的主要函数库均存放于/lib, /usr/lib目录下,其中采用*.so.*方式命名的是动态函数库,而以*.a方式命令的是静态函数库。 静态链接库-特点1、程序所要用到的库函数代码在链接时全 ...
分类:
其他好文 时间:
2019-02-23 00:58:11
阅读次数:
200
静态库:复制静态库作为程序代码段的一部分,在可执行程序运行前就已经加入到执行码中, 成为执行程序的一部分 1.优点:将函数库中的函数本地化,寻址方便,速度快,等于字典一函数使用效率 2.缺点:笑话系统资源较大,每个进程使用静态库都要复制一份,无端浪费内存 3.使用场景:多用于核心程序,保证时效性,可 ...
分类:
其他好文 时间:
2019-02-22 01:07:31
阅读次数:
184
虚拟机内存区常见名词: 栈帧(Frames): 栈帧是用来存储数据和部分结果,以及执行动态链接、方法返回值和异常信息的。 每次方法的调用都会生成一个栈帧,然后将该栈帧进行压栈。当方法结束后,该栈帧将会出栈、被销毁。 无论是正常结束还是异常结束。 每个栈帧都是自己的局部变量表、操作数栈、以及对当前方法 ...
分类:
编程语言 时间:
2019-02-22 00:34:37
阅读次数:
193
所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。.so文件是共享库文件(动态链接)。动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函 ...
分类:
其他好文 时间:
2019-02-19 13:20:02
阅读次数:
179
LD_PRELOAD这个变量允许你定义在程序运行时优先加载的动态链接库,从而在程序运行时的动态链接 下面程序的看一个例子-getuid.c 这段程序很简单,就是获取当前的uid 运行后确实拿到了当前用户的uid,下面就通过LD_PRELOAD变量来劫持系统原来的getuid函数,从而改变返回结果 一 ...
分类:
其他好文 时间:
2019-02-19 11:46:36
阅读次数:
228
linux上静态库和动态库的编译和使用(附外部符号错误浅谈) 这就是静态库和动态库的显著区别,静态库是编译期间由链接器通过include目录找到并链接到到可执行文件中,而动态库则是运行期间动态调用,只有运行时找不到对应动态库才会报错 gcc创建和使用静态库、动态库 gcc动态链接库*.so文件的生成 ...
分类:
系统相关 时间:
2019-02-17 12:50:16
阅读次数:
192