标签: sunstudio

Solaris 11似乎缺少系统头文件

我从这里安装了Solaris 11 x86(在qemu环境中):http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html

我已经从这里解压缩/选择Sun Studio 12.3 x86 for Solaris 11:http://www.oracle.com/technetwork/server-storage/solarisstudio/downloads/index.html

但是编译器找不到像sys/types.h或inttypes.h这样的系统头文件或任何可能定义int32_t的系统头文件.例如,dtrace.h头文件依赖于sys/types.h,我找不到它.好像我错过了一个包裹或什么的.我从来没有使用过Linux以外的任何东西(许多发行版,包括来自源代码),我迷失了.我错过了什么?

solaris sunstudio

7
推荐指数
1
解决办法
3814
查看次数

在共享库中混合PIC和非PIC对象

这个问题关系到这一个,以及它的答案.

我刚刚发现了一些正在构建的构建中的丑陋.情况看起来有点像以下(用gmake格式编写); 请注意,这特别适用于sparc和x86硬件上的32位内存模型:

OBJ_SET1  := some objects
OBJ_SET2  := some objects

# note: OBJ_SET2 doesn't get this flag
${OBJ_SET1} : CCFLAGS += -PIC

${OBJ_SET1} ${OBJ_SET2} : %.o : %.cc
  ${CCC} ${CCFLAGS} -m32 -o ${@} -c ${<}

obj1.o       : ${OBJ_SET1}
obj2.o       : ${OBJ_SET2}
sharedlib.so : obj1.o obj2.o
obj1.o obj2.o sharedlib.so :
  ${LINK} ${LDFLAGS} -m32 -PIC -o ${@} ${^}
Run Code Online (Sandbox Code Playgroud)

显然,它可以在共享对象中混合使用和不使用PIC编译的对象(这已经使用了多年).我不太了解PIC是否知道这是一个好主意/聪明,而我的猜测是在这种情况下它不是必需的,而是它正在发生,因为有人不在乎找到正确的方法来做到这一点关于构建的新东西.

我的问题是:

  1. 这样安全吗?
  2. 这是不是一个好主意
  3. 结果会发生什么样的潜在问题
  4. 如果我将所有内容切换到PIC,是否有任何非显而易见的陷阱我可能需要注意.

compiler-flags sunstudio

6
推荐指数
1
解决办法
2637
查看次数

Sun Studio 12中的模板编译错误

我们正在迁移到Sun Studio 12.1并使用新的编译器[CC:Sun C++ 5.10 SunOS_sparc 2009/06/03].编译使用早期版本的Sun编译器[CC:Sun WorkShop 6 update 2 C++ 5.3 2001/05/15]编译好的代码时,我遇到了编译错误.

这是我得到的编译错误.

"Sample.cc":错误:无法找到main()中所需的LoopThrough(int [2])匹配项.1检测到错误.***错误代码1.

码:

#include <iostream> 

#define PRINT_TRACE(STR) \
std::cout << __FILE__ << ":" << __LINE__ << ":" << STR << "\n";

template<size_t SZ>
void LoopThrough(const int(&Item)[SZ])
{
    PRINT_TRACE("Specialized version");
    for (size_t index = 0; index < SZ; ++index)
    {
        std::cout << Item[index] << "\n";
    }
}


/*     
    template<typename Type, size_t SZ>
    void LoopThrough(const Type(&Item)[SZ])
    {
        PRINT_TRACE("Generic version");        
    }
 */  



int main()
{
    {
       int arr[] …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization sunstudio overload-resolution

6
推荐指数
1
解决办法
890
查看次数

零大小的数组和数组边界检查

当使用GNU Fortran(v4.4.3)或Sun Studio F95(v8.3)进行编译且没有数组界限时,检查以下程序是否正确运行。但是,当分别打开数组边界检查(gfortran -fbounds-checkf95 -C)时,GNU编译的可执行文件将再次运行而不会出现错误,而Sun Studio编译的可执行文件会给出运行时错误,

 ******  FORTRAN RUN-TIME SYSTEM  ******
Subscript out of range. Location:  line 44 column 20 of 'nosize.f90'
Subscript number 2 has value 1 in array 't$27'
Run Code Online (Sandbox Code Playgroud)

这是对的错误,该调用sub2()使用的自动数组虚拟参数x。该sub1()呼叫运行罚款或者编译器和任何标志。

据我所知,该程序是“合法的”,因为零大小的数组可以像非零大小的数组一样被引用,并且没有零长度维的显式索引x。但是,我在这里缺少一些零尺寸的数组切片或自动数组的微妙之处吗?我是否应该期望数组边界检查在不同的编译器中表现相同,还是应该将其视为特定于供应商的扩展?

MODULE subs
  IMPLICIT NONE
CONTAINS    
  SUBROUTINE sub1(x)
    IMPLICIT NONE
    REAL :: x(:,:)
    PRINT*,'------------------------------------'
    PRINT*,SHAPE(x)
    PRINT*,SIZE(x)
  END SUBROUTINE sub1

  SUBROUTINE sub2(n1,n3,x)
    IMPLICIT NONE
    INTEGER,INTENT(in) :: n1, n3
    REAL :: x(n1,n3)
    PRINT*,'------------------------------------'
    PRINT*,SHAPE(x)
    PRINT*,SIZE(x)
  END SUBROUTINE …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran sunstudio

5
推荐指数
1
解决办法
5202
查看次数

警告VC++和Sun Studio中的字段初始化顺序,签名比较和未使用的变量

我希望为以下C++编译问题和相应的编译器启用警告:

  1. 未使用的变量 - Sun Studio CC

    例: void m() { int i = 10; }

  2. 签署无符号比较 - VC++Sun Studio CC

    例: if ((unsigned) 10 < -1);

  3. 错误的字段初始化顺序 - VC++Sun Studio CC

    例: class A { int i, j; A() : j(0), i(0) {} };

所有这些都被GCC捕获,我想在VC++和Sun Studio中启用它们.

bash-4.1$ g++ -Wall main.cpp
main.cpp: In function ‘void m()’:
main.cpp:1: warning: comparison between signed and unsigned integer expressions
main.cpp:1: warning: unused variable ‘i’
main.cpp: In constructor ‘A::A()’:
main.cpp:1: warning: ‘A::j’ …
Run Code Online (Sandbox Code Playgroud)

c++ sunstudio visual-c++

5
推荐指数
1
解决办法
623
查看次数

在Solaris上构建Boost

是否会在Solaris上构建完整的Boost?

我想知道是否有人在此之前取得了成功(特别是原型/精神版),然后再支付修补Sun Studio 12.2到最新版本的支持合同.我得到了一些错误,有些看起来已经在修补程序中得到了解决,但是向Oracle支付费用并不便宜,所以我宁愿希望它能在我做之前完成.

现在,我只是尝试在Solaris上使用cpp-netlib并使用Boost属性树解码一些通过HTTP获取的JSON.它在Mac OS X上运行良好 - 所以我希望我可以在Solaris上使用相同的代码.

c++ boost solaris sunstudio cpp-netlib

5
推荐指数
1
解决办法
4003
查看次数

连接gcc libs的Sun Studio:异常不起作用

我需要使用Sun Studio构建一个应用程序.此应用程序使用只能使用Gnu C++构建的共享库.共享库有一个C接口,因此代码可由Sun编译器调用(这是为了避免名称错位问题,另请参阅此问题).

除了异常处理之外的一切都很好.当共享库中抛出异常时,程序会出现段错误.仅当使用Sun Studio编译器编译主程序时才会发生这种情况.使用Gnu C++编译器编译下面的最小示例,程序运行正常,共享库检测到异常.

计划A:动态链接以下是设置的说明:

GCC                       SOLARIS STUDIO
                shared
c_layer.so      <-----    application
(no exceptions)           (uses exceptions sol studio)
   |
   | use flag -static -static-libstdc++ -static-lib-gcc
   v
gcc_only_lib.so
libstdc++.so
(uses gcc exceptions)
Run Code Online (Sandbox Code Playgroud)

结果:抛出异常后会发生分段违规(请参阅下面的代码).

B计划:静态链接

如上所述,但建立c_layer.a

结果:


文件中未定义的第一个引用符号__cxa_allocate_exception libs/cInterface/libcInterface.a(c_layer.cpp.o)std :: string :: ~std :: basic_string()libs/cInterface/libcInterface.a(c_layer.cpp.o)__ cxa_end_catch libs /cInterface/libcInterface.a(c_layer.cpp.o)__cxa_free_exception libs/cInterface/libcInterface.a(c_layer.cpp.o)__cxa_begin_catch libs/cInterface/libcInterface.a(c_layer.cpp.o)__ cxa_throw libs/cInterface/libcInterface.一个(c_layer.cpp.o)

问题:为什么exeption处理不能与Sun Studio一起使用?


如果我像这样强制执行gcc运行时:

LD_PRELOAD=/usr/sfw/lib/amd64/libgcc_s.so ./example
Run Code Online (Sandbox Code Playgroud)

它崩溃的方式不同:

$>在抛出一个'std :: runtime_error'$>的实例后终止调用,以递归方式调用

(dbx)其中 1 __lwp_sigqueue(0x1,0x6,0xffffc1000bae5060,0xffffffff,0x0,0xffff80ffbffff810),位于0xffff80ffbf51e70a [2] thr_kill(0x0,0x0,0x0,0x0,0x0,0x0),位于0xffff80ffbf512ec8 [3]上升(0x0,0x0) ,0x0,0x0,0x0,0x0),位于0xffff80ffbf4c291d [4]中止(0x0,0x0,0x0,0x0,0x0,0x0),位于0xffff80ffbf497ff2 [5] __gnu_cxx :: __ verbose_terminate_handler(0x0,0x0,0x0,0x0,0x0, 0x0),位于0xffff80ffbd9de911 …

c++ gcc solaris sunstudio

5
推荐指数
2
解决办法
1225
查看次数

SunStudio C++编译器编译指示禁用警告?

与SunStudio11捆绑在一起的STLport会产生很多警告.我相信大多数编译器都有办法禁用某些源文件的警告,如下所示:

太阳C.

#pragma error_messages off

#include <header.h>
// ...

#pragma error_messages on
Run Code Online (Sandbox Code Playgroud)

GCC

#pragma warning(push, 0)        

#include <header.h>
// ...

#pragma warning(pop)
Run Code Online (Sandbox Code Playgroud)

你如何在SunStudio C++编译器中做到这一点?(顺便说一句,sunstudio C pragma在sunstudio C++中不起作用)

warnings suppress-warnings sunstudio

3
推荐指数
1
解决办法
2403
查看次数

cc(C++)中-h <name>和-o <outputfile>选项之间的区别

我正在构建.so库并且想知道 - b/w -h和-o cc complier选项(使用Sun Studio C++)有什么区别?

他们不是指同一件事 - 输出文件的名称?

c++ unix linux solaris sunstudio

3
推荐指数
1
解决办法
286
查看次数

main()内部的struct定义导致Segmentation Fault

是不可能在main()中定义结构.我尝试以下只是为了获得分段错误:

#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#define TRUE 1


void main(int argc,char **argv)
{
struct test_struct
{

        char test_name[50];
        char summary_desc[200];
        char result[50];
};

struct suite_struct
{
        char suite_name[50];
        struct test_struct test[500];
        int test_count;
        int passed;
        int failed;
        int unresolved;
        int notrun;
}suite[500];

        int a,b;

        for (a=0;a<500;a++)
        {
                strcpy(suite[a].suite_name,"");
                for (b=0;b<500;b++)
                {
                        strcpy(suite[a].test[b].test_name,"");
                        strcpy(suite[a].test[b].summary_desc,"");
                        strcpy(suite[a].test[b].result,"");
                }
                suite[a].test_count=0;
                suite[a].passed=0;
                suite[a].failed=0;
                suite[a].unresolved=0;
                suite[a].notrun=0;
        }
}
Run Code Online (Sandbox Code Playgroud)

但是当我在其外部采用结构定义时,它的工作原理是:

#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#define TRUE 1


struct test_struct 
{ 

        char test_name[50]; 
        char …
Run Code Online (Sandbox Code Playgroud)

c struct solaris cc sunstudio

3
推荐指数
1
解决办法
8539
查看次数