0. 前言一个多月前,由于工程项目的需要,匆匆的学习了一下cmake的使用方法,现在有时间拿出来整理一下。本文假设你已经学会了cmake的使用方法,如果你还不会使用cmake,请参考相关资料之后再继续向下看。本文中介绍的是生成可执行程序的方法和步骤,生成动态库和静态库的方法与此有所不同,随后会介绍动...
分类:
其他好文 时间:
2014-11-24 16:51:09
阅读次数:
307
1. Shared Library的优势
共享库,又称动态库或so文件,顾名思义,它可以在可执行文件启动时加载或进程运行期被调用。使用共享库有很多好处,例如(包含但不限于下面提到的场景):
1) 减少了依赖共享库的模块的大小,因为它们不必把共享库提供的功能的实现代码静态编译到自己的模块代码中。
2)在同一台机器上运行的多个进程会在内存中共享同一份动态库,操作系统采用的这种内存布局方式可以极大...
分类:
系统相关 时间:
2014-11-24 15:27:52
阅读次数:
473
今天编译一个动态库,里面有用C编写的源文件,为了调试自己加了一些简单的信息输出语句,但是总是编译不过,最后精简到只是定义一个函数的局部变量也会编译失败,最后Google了才明白,vs在编译C代码的时候会有一些特殊的check,其中一种就是需要函数定义局部变量要在开头。举例如下:错误的代码void f...
分类:
其他好文 时间:
2014-11-24 14:59:40
阅读次数:
257
ELF(Executable and Linking Format)用于存储Linux程序。ELF文件分三种类型: 1、目标文件(通常是.o); 2、可执行文件(我们的运行文件) 3、动态库(.so)ELF头的各个字段:typedef struct { unsigned char e_ident.....
分类:
其他好文 时间:
2014-11-24 11:40:39
阅读次数:
225
开发者使用 treefrog 建立的工程,生成的是动态库,会被 tfserver 加载,tfserver 将 URL 处理为 controller 、 action 、 argument 三部分,参考URL Routing这个文档。如下:[html] view plaincopy/controll....
分类:
编程语言 时间:
2014-11-23 07:02:07
阅读次数:
244
http://www.2cto.com/kf/201402/276718.html一、什么是库?库是共享程序代码的方式,一般分为静态库和动态库。二、静态库与动态库的区别?静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝。动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调...
分类:
移动开发 时间:
2014-11-22 20:11:05
阅读次数:
197
编译一个能在 arm 平台上用的动态库,结果报错如下:
relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC
./obj/xxx.o: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
其实错误信息已经给出解决办法了,加...
分类:
其他好文 时间:
2014-11-21 18:40:09
阅读次数:
3187
这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基...
分类:
编程语言 时间:
2014-11-21 17:59:47
阅读次数:
297
一、ldconfigldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的...
分类:
其他好文 时间:
2014-11-20 11:44:59
阅读次数:
206