问题标签 [solaris-studio]
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.
c++ - 这是 Solaris Studio 中的错误吗?
源代码(在问题的末尾)会引发我认为是 Solaris Studio(而不是其他编译器)上的错误。
为清楚起见,错误消息已用新行重新格式化:
注意两个函数 runGenEntries 的第一个参数仅相差一个字符(规则末尾的“s”)
当第一个参数的类型为:
当第一个参数不是类型时不会发生:
最终解析为相同的类型!
这是仅在 Solaris 上实现的一些晦涩的 C++ 规则的结果吗?还是当它破坏符号时这是一个 Solaris Studio 错误?
完整的源码
以下源代码可以在任何编译器上进行编译。
定义将激活引发错误的代码,或者激活应该产生相同结果的代码(但这次,没有错误):
此代码是在以下平台上编译的:
solaris - 在哪里可以找到 solaris 8 的 CC?
我需要在 solaris 8 sparc 上编译 openssl,由于缺少 'cc' 编译器,编译中断。我找不到 Sun cc 的任何工作链接,我发现的只是 Sun Solaris Studio 的断开链接。
[更新]
我发现一些东西看起来像是包含 Solaris Studio 11,但我没有使用它,我设法在本地找到了一些东西。
c++ - C++ 预处理器删除对可变参数宏的调用中的空格 (Solaris Studio 12.3)
Oracle Solaris Studio 12.3 的 C++ 预处理器在扩展__VA_ARGS__
.
任何人都可以在他们的系统上确认这种行为吗?这是一个已知的编译器错误吗?有没有解决这个问题的方法?
为了说明,这是一个简单的测试程序,vaargs.c
:
C 预处理器按预期工作:
但是 C++ 预处理器删除了“hello”和“world”之间的空格:
c++ - 尝试使用 Oracle Solaris Studio 12.3 在 Solaris 10 上编译 libpqxx-4.0.1 时出错
问题描述
我无法使用 Solaris Studio 12.3 在 Solaris 10 上编译 libpqxx-4.0.1。
背景
当我需要 libpqxx 时,我做的第一件事就是在 OpenCSW 中使用/opt/csw/bin/pkgutil -a libpqxx
. 但是,OpenCSW 中的软件包被列为版本“5.0,REV=2012.05.06”,并且在
OpenCSW网站上查看 CSWlibpqxx5-0 似乎表明这是一个旧的、不稳定的快照。我想要一个稳定的版本。
我从 libpqxx 网站下载了 libpqxx-4.0.1.tar.gz 并编译了它。自从g++
我在我的$PATH
. 有效。一切都很顺利。我能够SELECT
从我的数据库等等。
然后我进入了对我的代码最重要的阶段;与专有的 C++ API 进行通信。g++
在我尝试链接到此 API 的库后,我的代码将不再编译。API 包括我之前使用CC
. 这些示例不使用
g++
. 我想我也必须使用CC
as 来编译我的代码,而不是使用g++
. 我的代码无法使用CC
. g++
编译后的 libpqxx-4.0.1有一些CC
不喜欢的地方。
因此,我决定我需要使用CC
也编译 libpqxx-4.0.1,而不是使用g++
.
采取的步骤
为了消除潜在错误配置环境引起的问题(自 2012 年以来,我一直在系统上使用我的帐户,随着时间的推移,各种环境变量等已经积累),我在系统上创建了一个具有干净主目录的新用户。
下面是我接下来所做的记录,导致构建错误。
-bash-3.2$ pwd
-bash-3.2$ ls -al
-bash-3.2$ /usr/sfw/bin/gtar xf libpqxx-4.0.1.tar.gz
Python 2.4.6,/usr/bin/python
在 Solaris 10 中遇到了脚本问题,所以我做了一个快速而肮脏的补丁。
-bash-3.2$ diff libpqxx-4.0.1/tools/splitconfig splitconfig
-bash-3.2$ cp splitconfig libpqxx-4.0.1/tools/
我$PATH
在这一点上只是/usr/bin
。
-bash-3.2$ echo $PATH
我需要ld
。它位于/usr/ccs/bin
.
-bash-3.2$ export PATH=$PATH:/usr/ccs/bin
CC
来自 Oracle Solaris Studio 12.3。(请参阅标题附加信息下的详细信息。)
-bash-3.2$ which CC
-bash-3.2$ cd libpqxx-4.0.1
-bash-3.2$ ./configure --prefix=/var/tmp/build/install_test --enable-shared --enable-documentation
make
from/usr/ccs/bin
之前无法构建它,所以现在我尝试使用
dmake
Oracle Solaris Studio 12.3。
-bash-3.2$ which make
-bash-3.2$ which dmake
-bash-3.2$ dmake
附加信息
-bash-3.2$ cat /etc/release
-bash-3.2$ /usr/bin/version
-bash-3.2$ pkgchk -l -p /usr/bin/CC
-bash-3.2$ pkginfo | grep SPRO
c++ - 如何构建独立于编译器的 C++ 库(用于 Solaris Studio 和 gcc)?
我想扩展我的库,它目前只使用 gcc 编译,以供 Solaris Studio 使用。
我的想法是执行以下操作:
- 用 C 语言编写包装函数,通过外部 C链接公开接口的相关部分。
- 然后使用 gcc 构建这个库。生成的 c-header 和二进制文件是独立于编译器的,因为不再有名称修饰。
- 将 c-header 和链接包含到使用 Solaris Studio 编译的项目中。
问题:这是一种可行的方法还是有更好的解决方案?
注意:除了名称修饰之外,还要注意与异常处理相关的问题。
c++ - 如何使用 Solaris Studio 12.4 编译器构建 Boost V1.57
我尝试在 Intel Solaris V11.2 平台上使用全新的 Solaris Studio 12.4 编译器构建 Boost V1.57。我试图在OTN 开发论坛上发布错误,但结果是我的简单 OTN 帐户不允许我添加新帖子。因此,SO的问题。
简要总结:1)自举成功:
2)构建命令行(注意我把b2
和编译器放在我的PATH
. 这是一个“阶段”构建,即没有安装步骤,只是为了看到所有的库都可以构建:
这是一个压缩的错误列表:
IMO 任何体面的 C++ 编译器都应该能够构建 Boost,因为我几乎无法想象没有 Boost 库的任何严肃的 C++ 项目。所以我只是想知道 Boost 或 Solaris Studio 开发人员是否会阅读这篇文章并帮助我解决一些补丁......
非常感谢任何提示!
c++ - 常量添加无效?错误:不能使用 char** 来初始化 const char**
Solaris Studio 正在生成最令人费解的错误消息。
错误信息是:
第 161 行:错误:无法使用 char** 来初始化 const char**。
为什么添加constness 会成为问题?我卡住了,请帮帮我...
指针 char* inbufptr 指向数组的开头,并且不承诺保持任何常量。
现在,如果我现在有一个指针 char const **inbufptr_pos 这种类型保证不会更改数组的内容,但我仍然可以更改指针指向的位置。如果我这样做,我没有更改数组,我看不出有什么问题。
c++ - C++ 通过引用在 LP64 中更改我的指针值。我应该看什么?
我深入了解 synergy-project.org 的旧版本(1.3.4),在 Solaris Studio 12.4 上构建它 在这个程序中有 2 个地方使用参数指针调用函数,并且指针被破坏方式。在-m64中编译和链接。我可以在构建标志或其他方面查看什么来弄清楚为什么这是乱码?在下面的日志中,程序在看到错误指针的函数内部设置了断点。它的父级(堆栈上的“向上”)具有正确的数据:
编码:
...其中 m_parser 解析为:
...请注意 m_parser 是如何随着 comm 协议的移动而重新加载的。
回答关于进入函数的问题:它在进入函数时被破坏,并导致函数很快崩溃。如果我将“parseHandshakeMessage() 硬编码到 handleData() 中,它可以正常工作。但是,我在这个系统中有其他示例依赖函数指针正常工作。我可能会发布编译标志,它们是多余的和广泛的。
c++ - Solaris SunStudio 12.4 标准库链接问题
我正在尝试使用 SunStudio 12.4 从 Solaris-10 上的 boost-asio 编译示例。使用 GCC 4.9.2 进行编译是可行的,但我需要同时支持这两种编译器,因此不能只切换。
CC -V 输出: CC: Sun C++ 5.13 SunOS_sparc 2014/10/20
编译行:(对于每个 cpp 文件)
CC -m32 -std=c++11 -I./asio-1.10.6/include -I./boost/include/boost-1_58 -c *.cpp -o *.o
Linker Line:(注意 *.o 实际上是之前生成的所有目标文件的列表)
CC -m32 -L./boost/sparc/sun/release32/lib *.o -o httpServer -lCrun -lCstd -lxnet -lboost_system
问题:
我得到一堆标准库东西的未解析符号(如字符串、ios_base、语言环境等)。我在这里发布了链接器错误。
我强烈怀疑这与使用-std=c++11
. 由于iterator_traits
. 尽管iterator_traits
不是 C++11 功能,但由于某种原因,SunStudio 无法编译它,除非它在 c++11 模式下编译。关于的错误iterator_traits
:
Error: iterator_traits is not a member of std.
导致此编译失败的代码在 boost 中boost/detail/iterator.hpp
。代码如下。
包含和使用此标头的其他内容会生成错误,例如Error: iterator_traits is not a member of boost::detail
,然后是其他语法错误,因为现在它认为以下所有代码都是无效的。
我尝试过的其他事情:
- 在 -lCrun 之前添加 -lC (链接器找不到该库)
- 添加 -lc (类似问题)。
- 查看 SUNWspro/libs 目录,发现 libCrun.so 和 libCstd.so 都存在。
- 将 -lCstd 放在 -lCrun 之前
其他(不太相关)信息:
- SPARC
- 有问题的 asio 示例是 httpServer (我相信它在示例中的服务器目录下)