Oracle Solaris Studio 12.2:C++ 用户指南

警告

如果要使客户端覆盖库中的函数,就必须确保该库生成期间未以内联方式生成该函数。如果使用 -xinline 指定函数名、在可以自动进行内联的 -xO4 或更高优化级别进行编译、使用内联说明符或者要使用跨文件优化,编译器会内联函数。

例如,假定库 ABC 具有缺省的分配器函数,该函数可用于库的客户端,也可在库的内部使用:

void* ABC_allocator(size_t size) { return malloc(size); }

如果在 -xO4 或更高级别生成库,则编译器将内联库组件中出现的对 ABC_allocator 的调用。如果库的客户端要用定制的版本替换 ABC_allocator,则在调用 ABC_allocator 的库组件中不能进行该替换。最终程序将包括函数的不同版本。

生成库时,用 __hidden__symbolic 说明符声明的库函数可以内联生成。假定这些库函数不被客户端覆盖。请参见4.1 链接程序作用域

__global 说明符声明的库函数不应内联声明,并且应该使用 -xinline 编译器选项来防止内联。