Linux下动态库、静态库的编译小记

动态库的编译:

g++ -Wall -fPIC -shared -o DataLog.so DataLog.cpp -I ./ -lpthread -L ../lib -llog4cpp

其中:-shared 指出编译、链接的目标是一个.so的动态库

-fPIC 对于64位平台是必需的

静态库的编译过程:

g++ -Wall -static -o DataLog.o -c DataLog.cpp -I ./

其中: -c 是只做编译,不做链接的选项,编译的结果是一个.o文件

用.o创建静态库:

ar rscv libDataLog.a DataLog.o

以下转自:http://blog.csdn.net/whyacinth/archive/2007/11/16/1889048.aspx

**********************gcc/egcs 的主要选项*********gcc 命令的常用选项选项 解释-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。-c 只编译并生成目标文件。-DMACRO 以字符串“1”定义 MACRO 宏。-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。-E 只运行 C 预编译器。-g 生成调试信息。GNU 调试器可利用该信息。-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。-lLIBRARY 连接时搜索指定的函数库LIBRARY。-m486 针对 486 进行代码优化。-o FILE 生成指定的输出文件。用在生成可执行文件时。-O0 不进行优化处理。-O 或 -O1 优化生成代码。-O2 进一步优化。-O3 比 -O2 更进一步优化,包括 inline 函数。-shared 生成共享目标文件。通常用在建立共享库时。-static 禁止使用共享连接。-UMACRO 取消对 MACRO 宏的定义。-w 不生成任何警告信息。-Wall 生成所有警告信息。

########创建和使用共享库#########特殊的编译和连接选项-D_REENTRANT 使得预处理器符号 _REENTRANT 被定义,这个符号激活一些宏特性。-fPIC 选项产生位置独立的代码。由于库是在运行的时候被调入,因此这个选项是必需的,因为在编译的时候,装入内存的地址还不知道。如果不使用这个选项,库文件可能不会正确运行。-shared 选项告诉编译器产生共享库代码。-Wl,-soname -Wl 告诉编译器将后面的参数传递到连接器。而 -soname 指定了共享库的 soname。# 可以把库文件拷贝到 /etc/ld.so.conf 中列举出的任何目录中,并以root 身份运行 ldconfig;或者# 运行 export LD_LIBRARY_PATH=’pwd’,它把当前路径加到库搜索路径中去。

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

ldd 用来显示执行文件需要哪些共享库, 共享库装载管理器在哪里找到了需要的共享库.

另外参考Zcanoe 在chinaunix的文章http://os.chinaunix.net/a2007/1015/976/000000976498.shtml

一个人骑行,孤单却内省;一群人骑行,壮观而有力。

Linux下动态库、静态库的编译小记

相关文章:

你感兴趣的文章:

标签云: