共享库编译
⑴ 关于linux动态链接共享库(如何解决应用程序
共享库是一个目标模块(.so),在运行时,可以加载到任意的存储器地址,并和一个在存储器中程序链接起来。这个过程称为动态链接,是由一个叫做动态链接器的程序来执行的。加载共享库有两种方式。
在应用程序执行之前,即应用程序被加载时,动态链接器加载和链接共享库。
在应用程序执行时,要求动态链接器加载和链接任意共享库,而无需在编译时链接那些库到应用中。
⑵ 为什么要用PIC编译Linux共享库
不是共享库,而是动态库 (dynamic library)。 动态库的意思是库内的地址是在load时刻才由loader动态决定的,所以和静态库不同,编译出来的动态库代码必须是 “位置无关代码” (PIC: position-independant code),所以编译的时候必须加上 -fPIC 选项。
⑶ Android中静态库和共享库的区别
简单来讲:
静态库是在连接阶段直接拷贝到代码中使用的,而共享库是由加载器加载到内存,在运行时使用的。
编译出来的静态库(这里指jar包)里每个java文件对应的class文件都单独存在,可以直接导入Eclipse等IDE使用
而编译出来的共享库(jar包),内部是Android字节码Dex格式的文件,一般无法导入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成静态库。
⑷ 编译GNU/Linux共享库,为什么要用PIC编译
不是共享库,而是动态库 (dynamic library)。 动态库的意思是库内的地址是在load时刻才由loader动态决定的,所以和静态库不同,编译出来的动态库代码必须是 “位置无关代码” (PIC: position-independant code)
⑸ Mac下编译Lua引用的C共享库失败, 求解
1.没有创建Lua_State
2.打开库文件
⑹ gcc编译共享库怎么不报错
这只能说明一个问题,你依赖的库本身有问题,没有把它的依赖都加进去,也就是你例子中的①libb.so依赖liba.so;,你应该在生成libb.so的时候,把对liba.so的依赖加进去,这样应该就没有问题了。
⑺ 在一个版本的linux下编译的共享库so文件,在其它linux版本下可以正常使用吗
建议先核对下两个系统的GCC版本。
⑻ Linux 下Makefile怎么写,编译包含 一个共享库文件,一个静态库文件,四个.c文件。
看看伟东山裸机的源代码就能知道了, 调用的库文件只需放在同一目录下就可以
⑼ Linux下的动态共享链接库的优点有哪些
动态共享库有以下的优点,使它在Linux开发中比静态链接库更加的流行。
(1) 节省内存
动态共享库无论被多少应用程序使用,在内存中都只存在一个动态共享库的副本,而不像静态链接库那样,一个应用程序在运行中用到静态链
接库,就会有多个静态链接库的副本 。
(2) 节省磁盘
这和节省内存有点相似,同样这也是由于静态链接库存在多个静态链接库的副本造成的。同样的应用程序,使用动态共享库编译出的版本通常比使用静态链接库编译出来的版本要小。因此,在嵌入式系统开发中使用动态共享库也不节省空间,提供了一种很好的选择。
(3) 便于软件修复与升级
由于动态共享是独立于应用程序存在的,因此,用新版本的动态共享库替旧版本的工作将变得非常容易。如果使用静态链接库的话,假设在一个静态库中发现了一个
ug,那么要修正这个
ug的话,就要重新编译所有使用这个静态库的应用程序,使用这个静态库的应用程序有很多的话,可以想象工作量是有多大。
(4) 提高性能
与采用静态链接库臃肿的应用程序相比,采用动态共享库的应用程序明显“苗条”得多,这样当操作系统加载应用程序时,是需要把应用程序
复制到内存中的,这样的“苗条”的动态链接库也就有了很大的优势,同时提高了程序的性能。
当然,动态链接库在有上述这些优势的同时,也有以下的几个劣势。复杂性,兼容性,调试困难。但是它在Linux上使用频率上仍然比静态链接库要高的多。应用的更加广泛。
⑽ 怎样编译加载共享库的可执行程序
1.下载FatJar插件2.安装之后,右键选择项目时,会出现BuildFatJar,选择该方法,然后按照向导即可一步步导出可执行jar文件。如果有外部的jar包,比如说sqljdbc.jar,则把所有要使用的第三方的jar包都复制到{Java_home}\jre\lib\ext目录下。(必须重新启动Eclipse才能加载这些jar包)而象SWT项目这样所使用的jar包,则不需要这么设置,直接在向导中选择所需要的jar包即可。3.然后就可以在导出目录中运行这个可执行jar包,但如果是SWT项目,则必须在包含该可执行jar包的目录下有一个swt-win32-3235.dll之类的文件。4.有了可执行的jar文件,然后可以使用exe4j.exe之类的jar转exe软件,如果使用exe4j.exe则当调用到sqljdbc.jar之类的外部包时,则必须将sqljdbc.jar也一并导入。安装向导就可以生成exe文件了,如果是SWT项目则也必须在同目录下有swt-win32-3235.dll之类的文件。