本章解释了如何使用命令行 C++ 编译器选项,并按功能汇总它们的使用。16.8 使用 dlopen 从 C 程序访问 C++ 库对这些选项进行了详细介绍。
下表显示了本书中使用的典型选项语法格式的示例。
表 3–1 选项语法格式示例
语法格式 |
示例 |
---|---|
-选项 |
–E |
–选项值 |
–Ipathname |
–选项=值 |
–xunroll=4 |
–选项 值 |
–o filename |
圆括号、大括号、方括号、"|" 或 "-" 字符以及省略号是选项说明中使用的元字符,而不是选项自身的一部分。关于使用语法的详细解释,请参见本手册前面的“开始之前”中的印刷约定。
C++ 编译器选项的某些通用指南:
– llib 选项用于与库 liblib.a(或 liblib.so) 链接。较稳妥的方式是总是将 – llib 放在源文件和目标文件后面,这样可以确保库搜索顺序。
通常,编译器选项的处理顺序是从左到右(有个特殊情况,即 – U 选项在所有 – D 选项之后处理),从而可以有选择地覆盖宏选项(包括其他选项的选项)。此规则不适用于链接程序选项。
-features、–I -l、–L、-library、–pti、–R、-staticlib、-U、-verbose 和 -xprefetch 选项会累积,但不覆盖。
-D 选项会累积,但相同名称的多个 -D 选项会互相覆盖。
在本节中,编译器选项按功能分组以便提供快速参考。有关每个选项的详细介绍,请参见16.8 使用 dlopen 从 C 程序访问 C++ 库。
这些选项适用于除了特别注明之外的所有平台;基于 SPARC 的系统上的 Solaris OS 特有的功能标识为 SPARC,基于 x86 的系统上的 Solaris OS 特有的功能标识为 x86。
选项 |
操作 |
---|---|
–compat |
设置编译器的主发行版本兼容模式。 |
+e{0|1} |
控制虚拟表的生成。 |
–g |
用于与调试一起使用的编译。 |
–KPIC |
生成位置独立的代码。 |
–Kpic |
生成位置独立的代码。 |
–mt |
编译和链接多线程代码。 |
–xcode=a |
(SPARC) 指定代码地址空间。 |
–xMerge |
(SPARC) 将数据段和文本段合并。 |
–xmodel |
针对 Solaris x86 平台修改 64 位对象形式 |
+w |
标识可能产生不可预料结果的代码。 |
+w2 |
发出由 +w 发出的所有警告以及关于技术违规的警告,这些技术违规可能是无害的,但可能会降低程序的最大可移植性。 |
-xregs |
如果编译器可以使用更多的寄存器用于临时存储(临时寄存器),那么编译器将能生成速度更快的代码。该选项使得附加临时寄存器可用,而这些附加寄存器通常是不适用的。 |
-z arg |
链接程序选项。 |
选项 |
操作 |
---|---|
–instlib |
禁止生成已出现在指定库中的模板实例。 |
-m32|-m64 |
指定编译的二进制对象的内存模型。 |
-xinstrument |
编译程序并为其提供程序设备以便 Thread Analyzer 对其进行分析。 |
–xjobs |
设置编译器可以为完成工作而创建的进程数量。 |
–xpch |
可以减少应用程序的编译时间,该应用程序的源文件共享一组共同的 include 文件。 |
–xpchstop |
指定在使用 -xpch 选项创建预编译头文件时要考虑的最后一个 include 文件。 |
–xprofile_ircache |
(SPARC) 重新使用在执行 -xprofile=collect 期间保存的编译数据。 |
–xprofile_pathmap |
(SPARC) 支持单个配置文件目录中有多个程序或共享库。 |
选项 |
操作 |
---|---|
+d |
不扩展 C++ 内联函数。 |
–dryrun |
显示但不编译由驱动程序传递到编译器的选项。 |
–E |
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。不编译。 |
–g |
用于与调试一起使用的编译。 |
–g0 |
编译以便进行调试,但不禁用内联。 |
–H |
打印包含文件的路径名称。 |
–keeptmp |
保留编译时创建的临时文件。 |
–migration |
解释可以从早期编译器获得有关移植信息的位置。 |
–P |
仅预处理源文件,输出到 .i 文件。 |
–Qoption |
直接将选项传递到编译阶段。 |
–readme |
显示联机 README 文件的内容。 |
–s |
从可执行文件中去掉符号表,这样可以保护调试代码的能力。 |
–temp=dir |
为临时文件定义目录。 |
–verbose=vlst |
控制编译器详细内容。 |
-xcheck |
对栈溢出增加一个运行时检查。 |
-xdumpmacros |
打印诸如定义、定义及未定义的位置和已使用的位置的宏信息。 |
–xe |
仅检查语法和语义错误。 |
–xhelp=flags |
显示编译器选项汇总列表。 |
–xport64 |
对 32 位体系结构到 64 位体系结构的移植过程中的常见问题发出警告。 |
–xs |
允许在没有目标 (.o) 文件的情况下使用 dbx 进行调试。 |
–xsb |
为源码浏览器生成表信息。 |
–xsbfast |
仅生成源代码浏览器信息,而不进行编译。 |
选项 |
操作 |
---|---|
-fma |
(SPARC) 启用自动生成浮点乘加指令。 |
–fns[={no|yes}] |
(SPARC) 禁用或启用 SPARC 非标准浮点模式。 |
–fprecision=p |
x86:设置浮点精度模式。 |
–fround=r |
设置启动时生效的 IEEE 舍入模式。 |
–fsimple=n |
设置浮点优化首选项。 |
–fstore |
x86:强制浮点表达式的精度。 |
–ftrap=tlst |
设置启动时生效的 IEEE 陷阱操作模式。 |
–nofstore |
x86:禁用表达式的强制精度。 |
–xlibmieee |
使 libm 在异常情况下对于数学例程返回 IEEE 754 值。 |
选项 |
操作 |
---|---|
–compat |
设置编译器的主发行版本兼容模式。 |
–features=alst |
启用或禁用各种 C++ 语言特性。 |
-xchar |
在 char 类型定义为无符号的系统上,简化代码的移植。 |
–xldscope |
控制变量和函数定义的缺省链接程序范围,以创建更快更安全的共享库。 |
–xthreadvar |
(SPARC) 更改缺省的线程局部存储访问模式。 |
-xtrigraphs |
启用三字母序列的识别。 |
–xustr |
启用识别由 16 位字符构成的字符串文字。 |
选项 |
操作 |
---|---|
–Bbinding |
请求符号、动态或静态库链接。 |
–d{y|n} |
允许或不允许整个可执行文件的动态库。 |
–G |
生成动态共享库来取代可执行文件。 |
–hname |
为生成的动态共享库指定名称。 |
–i |
通知 ld(1) 忽略任何 LD_LIBRARY_PATH 设置。 |
–Ldir |
将 dir 添加到要在其中搜索库的目录列表。 |
–llib |
将 liblib.a 或 liblib.so 添加到链接程序的库搜索列表。 |
–library=llst |
强制将特定库和相关文件包含到编译和链接中。 |
–mt |
编译和链接多线程代码。 |
–norunpath |
不将库的路径生成到可执行文件中。 |
–Rplst |
将动态库搜索路径生成到可执行文件中。 |
–staticlib=llst |
说明哪些 C++ 库是静态链接的。 |
–xar |
创建归档库。 |
-xbuiltin[=opt] |
启用或禁用标准库调用的更多优化。 |
-xia |
(SPARC) 链接合适的区间运算库并设置适当的浮点环境。 |
-xlang=l[,l] |
包含适当的运行库,并确保指定语言的正确运行时环境。 |
–xlibmieee |
使 libm 在异常情况下对于数学例程返回 IEEE 754 值。 |
–xlibmil |
内联选定的 libm 库例程以进行优化。 |
–xlibmopt |
使用优化数学例程的库。 |
-xlic_lib=sunperf |
(SPARC) 在 Sun Performance LibraryTM 中进行链接。请注意,对于 C++,-library=sunperf 是在该库中进行链接的首选方法。 |
-xnativeconnect |
将接口信息包含在目标文件和后续共享库中,以便共享库可以与采用 JavaTM 编程语言编写的代码进行接口连接。 |
–xnolib |
禁止链接缺省系统库。 |
–xnolibmil |
在命令行上取消 – xlibmil。 |
–xnolibmopt |
不使用数学例程库。 |
选项 |
操作 |
---|---|
–xlic_lib=sunperf |
(SPARC) 在 Sun Performance Library 中进行链接。请注意,对于 C++,-library=sunperf 是在该库中进行链接的首选方法。 |
–xlicinfo |
显示许可证服务器信息。 |
以下选项要么当前已废弃所以编译器不再接受它们,要么将从以后的发行版中删除。
选项 |
操作 |
---|---|
-library=%all |
废弃的选项,在以后的发行版本中将被删除。 |
–noqueue |
禁用许可证队列。 |
-ptr |
编译器忽略。以后的编译器发行版本可以使用其他行为来重用该选项。 |
-vdelx |
废弃的选项,在以后的发行版本中将被删除。 |
-xcg89 |
使用 -xtarget=ss2。 |
-xnativeconnect |
已废弃,没有替代选项。 |
-xprefetch=yes |
改用 -xprefetch=auto,explicit。 |
-xprefetch=no |
改用 -xprefetch=no%auto,no%explicit。 |
选项 |
操作 |
---|---|
–c |
仅编译;生成目标 (.o) 文件,但抑制链接。 |
–dryrun |
显示但不编译由驱动程序传递到编译器的选项。 |
–E |
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。不编译。 |
-erroff |
禁止编译器警告消息。 |
-errtags |
显示每条警告消息的消息标记。 |
-errwarn |
如果发出指示的警告消息,cc 将以失败状态退出。 |
-filt |
禁止编译器应用到链接程序错误消息的过滤。 |
–G |
生成动态共享库来取代可执行文件。 |
–H |
打印包含文件的路径名称。 |
–migration |
解释可以从早期编译器获得有关移植信息的位置。 |
–o filename |
将输出文件或可执行文件的名称设置为 filename。 |
–P |
仅预处理源文件,输出到 .i 文件。 |
–Qproduce sourcetype |
使 CC 驱动程序生成类型为 sourcetype 的输出。 |
–s |
从可执行文件去掉符号表。 |
–verbose=vlst |
控制编译器详细内容。 |
+w |
必要时打印附加警告。 |
–w |
禁止警告消息。 |
-xdumpmacros |
打印诸如定义、定义及未定义的位置和已使用的位置的宏信息。 |
-xe |
对源文件仅执行语法和语义检查,但不生成任何对象或可执行代码。 |
–xhelp=flags |
显示编译器选项汇总列表。 |
–xhelp=readme |
显示联机 README 文件的内容。 |
–xM |
输出 makefile 依赖性信息。 |
–xM1 |
生成依赖性信息,但排除 /usr/include。 |
–xsb |
为源码浏览器生成表信息。 |
–xsbfast |
仅生成源代码浏览器信息,而不进行编译。 |
–xtime |
报告每个编译阶段的执行时间。 |
–xwe |
通过返回非零的退出状态,将所有警告转换成错误。 |
-z arg |
选项 |
操作 |
---|---|
–fast |
选择编译选项的组合以优化某些程序的执行速度。 |
-fma |
(SPARC) 启用自动生成浮点乘加指令。 |
-g |
指示编译器和链接程序准备程序以进行性能分析(以及调试)。 |
–s |
从可执行文件去掉符号表。 |
-m32|-m64 |
指定编译的二进制对象的内存模型。 |
-xalias_level |
启用编译器执行基于类型的别名分析和优化。 |
–xarch=isa |
指定目标体系结构指令集。 |
-xbinopt |
准备二进制文件以便以后进行优化、转换和分析。 |
-xbuiltin[=opt] |
启用或禁用标准库调用的更多优化。 |
–xcache=c |
(SPARC) 定义优化器的目标高速缓存属性。 |
–xcg89 |
为通用 SPARC 体系结构编译。 |
–xcg92 |
为 SPARC V8 体系结构编译。 |
–xchip=c |
指定目标处理器芯片。 |
–xF |
启用函数和变量的链接程序重新排序。 |
-xinline=flst |
指定用户编写的哪些例程可以被优化器内联 |
-xipo |
执行过程间的优化。 |
–xlibmil |
内联选定的 libm 库例程以进行优化。 |
–xlibmopt |
使用优化数学例程的库。 |
–xlinkopt |
(SPARC) 在对目标文件进行优化的基础上对生成的可执行文件或动态库执行链接时优化。 |
–xmemalign=ab |
(SPARC) 指定假定的最大内存对齐以及未对齐的数据访问的行为。 |
–xnolibmil |
在命令行上取消 – xlibmil。 |
–xnolibmopt |
不使用数学例程库。 |
–xOlevel |
将优化级别指定为 level。 |
–xpagesize |
设置栈和堆的首选页面大小。 |
-xpagesize_heap |
设置堆的首选页面大小。 |
-xpagesize_stack |
设置栈的首选页面大小。 |
-xprefetch[=lst] |
(SPARC) 在支持预取的体系结构上启用预取指令。 |
-xprefetch_level |
控制 -xprefetch=auto 设置的自动插入预取指令的主动性。 |
–xprofile |
(SPARC) 收集运行时文件配置数据或使用运行时文件配置数据进行优化。 |
–xregs=rlst |
(SPARC) 控制临时寄存器的使用。 |
–xsafe=mem |
(SPARC) 允许无基于内存的陷阱。 |
–xspace |
(SPARC) 不允许会增大代码大小的优化。 |
–xtarget=t |
指定目标指令集和优化系统。 |
–xthreadvar |
(SPARC) 更改缺省的线程局部存储访问模式。 |
–xunroll=n |
启用在可能的场合下解开循环。 |
–xvis |
(SPARC) 使编译器可以识别 VISTM 指令集中定义的汇编语言模板。 |
选项 |
操作 |
---|---|
–Dname[=def] |
为预处理程序定义符号 name。 |
–E |
仅对 C++ 源文件运行预处理程序,并将结果发送到 stdout。不编译。 |
-H |
打印包含文件的路径名称。 |
–P |
仅预处理源文件,输出到 .i 文件。 |
–Uname |
删除预处理程序符号 name 的初始定义。 |
–xM |
输出 makefile 依赖性信息。 |
–xM1 |
生成依赖性信息,但排除 /usr/include。 |
选项 |
操作 |
---|---|
–p |
准备目标代码来收集数据以使用 prof 进行文件配置。 |
–xa |
为文件配置生成代码。 |
–xpg |
编译以便使用 gprof 配置程序进行文件配置。 |
–xprofile |
(SPARC) 收集运行时文件配置数据或使用运行时文件配置数据进行优化。 |
选项 |
操作 |
---|---|
–migration |
解释可以从早期编译器获得有关移植信息的位置。 |
–xhelp=flags |
显示编译器选项汇总列表。 |
–xhelp=readme |
显示联机 README 文件的内容。 |
选项 |
操作 |
---|---|
-H |
打印包含文件的路径名称。 |
–Ipathname |
将 pathname 添加到 include 文件搜索路径。 |
-I- |
更改包含文件搜索规则 |
–xM |
输出 makefile 依赖性信息。 |
–xM1 |
生成依赖性信息,但排除 /usr/include。 |
选项 |
操作 |
---|---|
–instances=a |
控制模板实例的放置和链接。 |
–ptipath |
为模板源文件指定附加搜索目录。 |
–template=wlst |
启用或禁用各种模板选项。 |
选项 |
操作 |
---|---|
–mt |
编译和链接多线程代码。 |
–xsafe=mem |
(SPARC) Allows no memory-based traps. |
–xthreadvar |
(SPARC) 更改缺省的线程局部存储访问模式。 |