http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-11.html 更 新静态库的符号索引表 本小节的内容相对简单。前边提到过,静态库文件需要使用“ar”来创建和维护。当给静态库增建一个成员时(加入一 个.o文件到静态库中),“ar”可直接将需要增加的.o文件简单的追加到静态库的末尾。之后当我们使用这个库进行连接生成可执行文件时,链接程序 “ld”却提示错误,这可能是:主程序使用了之前加入到库中的.o文件中定义的一个函数或者全局变量,但连接程序无法找到这个函数或者变量。 这 个问题的原因是:之前我们将编译完成的.o文件直接加入到了库的末尾,却并没有更新库的有效符号表。连接程序进行连接时,在静态库的符号索引表中无法定位 刚才加入的.o文件中定义的函数或者变量。这就需要在完成库成员追加以后让加入的所有.o文件中定义的函数(变量)有效,完成这个工作需要使用另外一个工 具“ranlib”来对静态库的符号索引表进行更新。 我们所使用到的静态库(文档文件)中,存在这样一个特殊的成员,它的名字是 “__.SYMDEF”。它包含了静态库中所有成员所定义的有效符号(函数名、变量名)。因此,当为库增加了一个成员时,相应的就需要更新成员 “__.SYMDEF”,否则所增加的成员中定义的所有的符号将无法被连接程序定位。完成更新的命令是: inux下编译静态库的时候,ar不带任何选项打包成.a文件后,对其进行ranlib操作有 什么用,如果不进行ranlib操作会有什么后果,我编译的时候没用这步操作也能正常运行,请达人给讲解一下。谢谢。http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/make-11.html 更 新静态库的符号索引
库文件名都是以lib开头的, 静态库 以a作为后缀,表示archive。 创建 静态库 : ar rs libstack.a stack.o push.o pop.o is_empty.o ar把目标文件打包成 静态库 ; r表示将后面的文件列表添加到文件包,若果文件包不存在就创建它; s是专用于生成 静态库 的,表示为 静态库 创建索引,这个索引被连接器 使用 ranlib 命令也可以为 静态库 创建索引。 ...
这次编译真的是惨痛的经历.先是经历了 linux 空间不足,然后是编译报错 /bin/sh: ranlib /usr/local/lib/libavdevice.a: No such file or directory 这个问题就是 LIB_INSTALL_EXTRA_CMD='$$( RANLIB )"$(LIBDI... 作者:gavinpong,相关源码可以在github仓库下载到,欢迎fork 与 交流:https://github.com/GavinPong 所有组件都可以在minigui官网上下载到:http://www.minigui.com/zhcn/download/ 下载miniGUI3.2.0组件 简单介绍一下各个库: freetype:字体 qvfb2和gvfb...
参考:http://study.chyangwa.com/IT/AIX/aixcmds1/ar.htm#a0949a5b 摘自:http://hi.baidu.com/doyee/blog/item/ad4c4a341089ed47251f1484.html 摘自:http://hi.baidu.com/kkernel/blog/item/e729cffa9036318e9f51465
Compile ffmpeg for Android Before Continuing this page, if u want to enable x264, please complete building x264 using android toolchain first. Check this. Please put x264 folder at same level of
In file included from libavfilter/aeval.c:26:0: ./libavutil/avassert.h:30:20: fatal error: stdlib.h: No such file or directory #include &lt...
1. 什么是 静态库 ?什么是动态库? - 静态库 是在编译时被链接到可执行文件中的库,它包含了所有的函数和数据,因此可执行文件较大,但运行时不需要加载额外的库文件。 - 动态库是在程序运行时被加载的库,它包含了多个可执行文件可以共享的函数和数据,因此可执行文件较小,但需要在运行时加载额外的库文件。 2. 静态库 和动态库的优缺点是什么? - 静态库 的优点是可靠性高,因为所有的代码都被编译到可执行文件中,不需要额外的库文件。缺点是可执行文件较大,占用磁盘空间较大,且无法在运行时更新库文件。 - 动态库的优点是可执行文件较小,因为共享库文件可以被多个可执行文件共享。缺点是依赖性高,因为需要在运行时加载库文件,如果缺少或版本不匹配会导致程序无法运行。 3. 动态库的加载过程是怎样的? - 当程序需要访问动态库中的函数或数据时,操作系统会检查可执行文件的依赖关系,加载动态库文件到内存中,并在符号表中查找相应的函数或数据。 - 如果找到了相应的函数或数据,程序就可以调用库函数或访问库数据。如果没有找到,操作系统会抛出未定义符号的错误。 4. 如何编译 静态库 和动态库? - 编译 静态库 可以 使用 命令"ar"和" ranlib ",例如: gcc -c file1.c file2.c ar rcs libmylib.a file1.o file2.o - 编译动态库可以 使用 命令"gcc"和"-shared"选项,例如: gcc -c -fpic file1.c file2.c gcc -shared -o libmylib.so file1.o file2.o 5. 如何 使用 静态库 和动态库? - 使用 静态库 可以在编译时链接库文件,例如: gcc -o myprog main.c -L/path/to/lib -lmylib - 使用 动态库可以在程序运行时加载库文件,例如: LD_LIBRARY_PATH=/path/to/lib ./myprog 6. 如何避免动态库版本不匹配的问题? - 在编译动态库时,可以 使用 版本号来标识不同的库版本,例如: gcc -shared -Wl,-soname,libmylib.so.1 -o libmylib.so.1.0.0 file1.o file2.o - 在程序中调用库函数时,可以 使用 版本号来指定库版本,例如: dlopen("libmylib.so.1", RTLD_NOW); 这样可以确保程序 使用 正确的库版本,并避免版本不匹配的问题。