Sun Studio 12:C++ 用户指南

16.3 生成动态(共享)库

动态(共享)库的生成方式与静态(归档)库的生成方式基本相同,除了在命令行上使用 – G 而不是 – xar

不应直接使用 ld。与静态库一样,CC 命令可以确保使用模板时,模板系统信息库中所有必要的模板实例都包括在库中。与应用程序链接的动态库中所有静态构造函数都在执行 main() 之前调用,所有静态析构函数都在 main() 退出之后调用。如果使用 dlopen() 打开共享库,则所有静态构造函数都在执行 dlopen() 时执行,所有静态析构函数都在执行 dlclose() 时执行。

应该使用 CC -G 来生成动态库。使用 ld(链接编辑器)或 cc(C 编译器)生成动态库时,异常可能无法生效,且库中定义的全局变量未初始化。

要生成动态(共享)库,必须使用 CC– Kpic– KPIC 选项编译每个对象来创建可重定位的目标文件。然后您就可以生成一个具有这些可重定位目标文件的动态库。如果遇到异常的链接失败,可能是忘记了使用 – Kpic– KPIC 编译某些对象。

要生成名为 libfoo.so 的 C++ 动态库(该库包含源文件 lsrc1.cclsrc2.cc 中的对象),请键入:


% CC -G -o libfoo.so -h libfoo.so -Kpic lsrc1.cc lsrc2.cc

-G 选项指定动态库的构造。-o 选项指定库的文件名。-h 选项指定共享库的名称。-Kpic 选项指定目标文件与位置无关。


注 –

CC -G 命令不会将任何 -l 选项传递给 ld。如果要使共享库依赖于另一个共享库,必须在命令行上传递必需的 -l 选项。例如,如果要使共享库依赖于 libCrun.so,必须在命令行上传递 -lCr un