-qprocimported、-qproclocal 和 -qprocunknown
适用的调用
| 选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
|---|---|---|---|---|
| -qprocimported, -qproclocal, -qprocunknown | ✓ | ✓ | ✓ | ✓ |
类别
等效编译指示
| xlc/xlC 和其他遗留的调用命令 | xlclang/xlclang + + 调用命令 |
|---|---|
| #pragma 个选项 proclocal , #pragma 个选项proc导入, #pragma 个选项 procunknown | 无 |
用途
将函数标记为 "本地" , "已导入" 或 "未知"。
局部函数与调用它们的函数静态地 绑定在一起;将为此类函数的调用生成 较小而运行较快的代码。 您可以使用 -qproclocal 选项或编译指示来命名编译器可以假定为本地的函数。
导入的函数动态地与库的共享 部分绑定在一起。 对标记为“已导入” 的函数调用生成的代码可能较大,但是其运行速度比对 标记为“未知”的函数生成的缺省代码序列更快。 您可以使用 -qprocimported 选项或编译指示来命名编译器可以假定要导入的函数。
在链接期间,将未知 函数解析为静态或动态绑定的对象。 您可以使用 -qprocunkown 选项或编译指示来命名编译器可以假定未知的函数。
语法
缺省值
-qprocunkown: 编译器假定所有函数的定义都未知。
参数
- function_name
- 编译器应假定为本地,导入或未知的函数的名称 (取决于指定的选项)。 如果未指定任何 function_name,那么编译器将假定 所有 函数都是本地函数,已导入函数或未知函数。
必须使用其别名来指代名字。 要获取 C++ 改编名称,请使用 -c 编译器选项仅将源代码编译为对象文件,并对生成的对象文件使用 nm 操作系统命令。 您还可以使用编译器提供的 c + + filt 实用程序来并排列出源名称和已管理的名称; 请参阅 Demangling 编译的 C++ 名称 以获取详细信息。 (另请参阅 名称修饰 以获取有关在声明上使用 extern "C"链接说明符以防止名称修饰的详细信息。)
使用量
如果标记为本地解析共享库函数的任何函数,那么链接程序将检测错误并发出警告。 如果标记为导入的任何函数解析为静态绑定的对象,那么生成的代码可能比为未知函数生成的缺省代码序列更大,运行速度也更慢。
- 具有本地定义。
- 标记为已导入或未知。
具有受保护、隐藏或内部可见属性。
如果指定了多个不带函数名的选项,那么将使用指定的最后一个选项。 如果在多个选项规范上指定相同的函数名,那么将使用最后一个函数名。
预定义的宏
无。
示例
myprogram.c 以及归档库 oldprogs.a ,请执行以下操作:- 函数
fun和sun指定为本地 - 函数
moon和stars指定为已导入 - 函数
venus指定为未知
xlc myprogram.c oldprogs.a -qprolocal=fun(int):sun()
-qprocimported=moon():stars(float) -qprocunknown=venus() int main(void)
{
printf("Just in function foo1()\n");
printf("Just in function foo1()\n");
}将导致链接程序错误。 要解决此问题,应显式地将调用的例程标记为从共享对象导入。 在这种情况下,您将重新编译源文件,并通过使用 -qproclocal -qprocimported=printf进行编译将 printf 显式标记为已导入。