问题标签 [sunstudio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
112 浏览

solaris - OracleSolaris 11.2——要使用的工具链

有两个选项 - SunStudio 或 gcc 工具链。开发驱动程序时要遵循的常见做法是什么——确保它使用 32 位和 64 位模式的两种编译器构建,或者选择一个编译器并坚持使用它?

谢谢。

0 投票
0 回答
244 浏览

c++ - 如何在没有调试符号的情况下在 Solaris 上调试由 C++ 二进制文件生成的内核?

我知道您可以在不使用 -g 的情况下在 Linux 上构建应用程序,然后使用来自相同代码但使用 -g 构建的二进制文件从应用程序中调试核心文件(所有其他选项都相同)。如果 nm 输出相同,则符号匹配,您可以有效地分析核心文件。

然而,虽然我在 Linux 上成功地做到了这一点,但我无法让它在 Solaris 上工作。我使用 -xO4 构建,所以也许 -g 不支持优化级别?我也试过 -g0 也没有用。nm 文件有很大的不同。我也在用-xs 构建。我应该在没有 -xs 的情况下构建吗?

在我尝试进一步分析之前,有没有人能够让它发挥作用?

需要明确的是,这是事后构建和使用调试库的问题。如果您使用 -g 和其他一切相同 (-O3) 构建 Linux,这是可能的,但我无法让它与使用 -xO4 的 Solaris 构建一起使用。

这不是让系统库匹配的问题,因为我已经从我们的客户那里获得了系统库的副本,并且它们匹配得很好。使用调试符号 (-g0) 构建时,我们的库不匹配。当我们不使用 -g0 时,我们的符号匹配得很好,但我们无法调试到源代码级别并获取本地和全局变量值。

0 投票
1 回答
1068 浏览

macros - 如何在 Sun Studio 下打印预处理器宏?

我在 SunOS 5.11 (Solaris 11.3) 上的 Sun Studio 12.3 下工作。我需要查看 Sun Studio 定义的宏来修复套件下的错误报告。这类似于Solaris 和 Preprocessor Macros,但引用的问题使用 GCC 及其预处理器;而不是 Sun Studio 的预处理器。

我已经运行了CC -flags,但我没有看到类似于 GCCcpp -dMg++ -dM -E - </dev/null. CC确实有-E,但它相当贫乏并且不打印任何预处理器定义:

使用真实的测试文件会产生类似的结果 - 缺少预处理器宏:

我还在 Sun Studio 手册2.5.3 Predefined Names中找到了对预处理器宏的讨论。表 A-2 还可以,但也主要是乏善可陈。它缺少基础知识,例如__cplusplus,缺少其他定义,例如_RWSTD_NO_CLASS_PARTIAL_SPEC.

如何在 Sun Studio 下打印预处理器宏?


0 投票
3 回答
97 浏览

c++ - 虚假的“预计会返回一个值”警告?

我在 SunOS 5.11 (Solaris 11.3) 上的 Sun Studio 12.3 下工作。它提供了一个虚假的警告:

“<file.h>”,第 1 行:警告:“<function>”应返回一个值。

该函数是基类接口的一部分,看起来像这样。我只提到基类接口以避免“你为什么要这样做”的讨论。像下面这样的非成员函数足以触发它。

我发现提到了类似的问题。例如,Xapian-core更改日志指出:

  • 禁用 Sun 的 C++ 编译器发出的“预期返回值”警告
    ,因为它会触发以“throw”语句结尾的函数。真正
    的实例将被具有高级警告机制的编译器捕获。

根据SunStudio C++ 编译器编译指示禁用警告,我可以使用-erroff=voidretw. 我很担心,-erroff=voidretw因为它可能会压制有效的发现。此外,如果我使用#pragma,那么我需要推送并弹出它以避免交叉授粉到用户代码中。我不知道如何在 Sun Studio 下推送和弹出警告状态。

我的问题是,如何禁用 Sun Studio 下标题中的一个功能的警告?


即使消息不同,这看起来也像是重复的:如何使“最后一条语句应返回值”警告静音?我想我将投票决定将其作为副本关闭。

0 投票
2 回答
340 浏览

c++ - ube 错误:_mm_aeskeygenassist_si128 内在至少需要 -xarch=aes

我在 SunOS 5.11 (Solaris 11.3) 上的 Sun Studio 12.3 下工作。它提供了一个我不太明白的编译错误:

添加-m64会产生相同的错误。

测试程序没有太多内容。它只是练习 SSE2 内在函数和 AES 内在函数:

我一直在尝试阅读手册并学习如何指定多个 cpu 架构功能,如 SSE2、SSSE3、AES 和 SSE4。但我似乎无法确定如何指定多个。这是我发现的更完整的页面之一:Oracle Man Page CC.1,但我显然遗漏了一些关于-xarch.

我做错了什么,我该如何解决?

0 投票
1 回答
115 浏览

cryptography - Sun Studio 下的 SSE3/SSSE3 + AES/RDRAND/RDSEED

我在 SunOS 5.11 (Solaris 11.3) 上的 Sun Studio 12.3 下工作。我正在调整一个包含负面测试的脚本,其中包括 CPU 功能的奇怪组合。我们这样做是为了了解我们是否以及如何失败;并确保没有意外的惊喜

我试图找出一种方法来启用本机指令集以及 AES、RDRAND 和 RDSEED。本机指令集由 Xeon 5100 提供,它实际上是 SSE3/SSSE3 加上一些附加指令。

编译所有源文件,/opt/solarisstudio12.3/bin/CC -DNDEBUG -g3 -xO2 -template=no%extdef -native -m64 -KPIC -xarch=aes -D__AES__=1结果如下:

这是意料之中的,因为 Sun Studio 假定功能和可用性不断发展。当我修改生成文件以构建cpu.cpp(用于功能测试)、rijndael.cpp(提供 AES 实现)和test.cpp(执行测试)时-xarch=aes,程序仍然崩溃,因为 SSE4 正在蔓延到test.cpp.

我尝试使用-xarch=aes -D__AES__=1 -xarch=no%sse4_1 -xarch=no%sse4_2删除不需要的指令集,但未能按预期编译。no%sse4_1只是来自,-template=no%extdef因为no%前缀似乎是关闭事物的方式。

如何在 Sun Studio 下使用 SSE3/SSSE3 并添加 AES/RDRAND/RDSEED?甚至可能吗?


我们使用的模式,到目前为止运行良好,是将编译时支持与运行时支持结合起来。所以 AES 代码看起来像:

对于像 Clang 和 GCC 这样的编译器,我们只需-march=native -maes -mrdrnd -mrdseed. 我很高兴接受没有发生异花授粉。

然后我在 Oracle 的留言板上看到两条消息,表明 RDRAND 在 Sun Studio 12.3 和 12.4 下被破坏(这里是 12.3这里是 12.4)。因此,我必须确保启用 RDRAND 以确保对其进行测试,这需要-xarch=aes.


基于_mm_aeskeygenassist_si128 内在至少需要 -xarch=aes,这可能是不可能的。这个问题实际上是尽职调查,以确保我们尽一切努力确保无故障体验。


0 投票
3 回答
919 浏览

solaris - Sun Studio 12.5 需要启用什么存储库?

我们是 Oracle OTN 网络的一部分。Oracle Solaris Studio 发布者已安装(启用?)并允许我们支持最高到 Sun Studio 12.4。我们希望在下一个版本中添加对 Sun Studio 12.5 的支持。

我们尝试按照 12.4 说明安装 Sun Studio 12.5,但没有找到:

我们可以找到哪个软件包存储库 Sun Studio 12.5?


这是预期的结果和搜索最新组件的结果。

0 投票
3 回答
264 浏览

macros - 在预处理器中检测 -xarch 选项?

我在 Solaris 11 上使用 Sun Studio 12.4 和 12.5。我们有一个源文件,它提供了 CRC32 的直接 C/C++ 实现,或使用 Intel 内在函数的 CRC32 优化版本。在运行时,函数指针会填充正确的实现。

在具有双 Xeon 的 x86 服务器上进行测试会产生以下结果,因为我们正在根据编译器版本提供代码路径。SunCC 12.1 添加了对 SSE4 的支持(如果我正确解析了矩阵),所以我们尝试在__SUNPRO_CC >= 0x5100.

SunCC没有定义惯用的 GCC 定义,例如__SSE4_1____SSE4_2__。此外,SunCC 似乎没有像 MS VC++ 那样提供内在函数,其中编译器版本表明支持。

SunCC 似乎启用了基于-xarch选项的功能,但我不清楚如何在预处理器中检测它。此外,using-xarch设置了一些导致程序在低级处理器(类似于“最小”平台)上执行失败的位。

我有两个问题。

  • 如何检测-xarch预处理器中的选项?
  • 如何禁用这些-xarch位以便程序可以在下级处理器上运行?

下面是来自用-xarch=aes. 请注意,没有任何迹象表明可用的功能。

0 投票
0 回答
137 浏览

c++ - 错误:不能使用向量 unsigned long long[2] 来初始化向量 unsigned long long[2]

我们在 Sun Studio 12.3 下进行测试。我们正在捕获 12.4 及更高版本下不存在的编译器错误。它在 12.1 及更早版本下不存在,但那是因为编译器在 AES 指令方面存在问题。它也不存在于其他编译器下,如 Clang、GCC、ICPC 和 VC++。错误是:

有问题的代码是:

我有一些问题:

  • 编译器有什么问题?
  • 清除错误的最佳方法是什么?

我必须问第二个问题,因为我不确定 SunCC 以及__m128i给定的类型我可以使用 raw memcpy,尝试编写我自己的交换,甚至尝试iter_swap不取消引用。

0 投票
2 回答
329 浏览

c++ - 鉴于其不透明类型和数组,如何在 C++03 中交换两个 __m128i 变量?

__m128i交换变量的最佳做法是什么?

背景是Sun Studio 12.2 下的编译错误,这是一个 C++03 编译器。__m128i是与 MMX 和 SSE 指令一起使用的不透明类型,它通常和unsigned long long[2]. C++03 不提供交换数组的支持,std:swap(__m128i a, __m128i b)在编译器下失败。


以下是一些不太符合要求的相关问题。它们不适用,因为std::vector不可用。