Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何构建AWS C++;Solaris上的SDK?_Amazon S3_Aws Sdk_Solaris - Fatal编程技术网

Amazon s3 如何构建AWS C++;Solaris上的SDK?

Amazon s3 如何构建AWS C++;Solaris上的SDK?,amazon-s3,aws-sdk,solaris,Amazon S3,Aws Sdk,Solaris,我试图在Solaris上构建AWS C++ SDK,但我不能成功地完成。 我在AWS C++ SDK页面发现了公开的问题,它是可能的,但是没有指南,我希望有人能帮助。 下面是我用来构建它的命令: $cmake../aws sdk cpp/-DCMAKE\u BUILD\u TYPE=Debug-DBUILD\u ONLY=“s3” 以下是输出: ——未指定目标;推断主机操作系统是平台编译目标 --将AWS库构建为共享对象 --生成linux构建配置 --建筑项目版本:1.7.134 --配置完

我试图在Solaris上构建AWS C++ SDK,但我不能成功地完成。 我在AWS C++ SDK页面发现了公开的问题,它是可能的,但是没有指南,我希望有人能帮助。 下面是我用来构建它的命令:

$cmake../aws sdk cpp/-DCMAKE\u BUILD\u TYPE=Debug-DBUILD\u ONLY=“s3”
以下是输出:

——未指定目标;推断主机操作系统是平台编译目标
--将AWS库构建为共享对象
--生成linux构建配置
--建筑项目版本:1.7.134
--配置完成
--生成完成
--生成文件已写入:/workspace/dmoini/sdk\u Build/.deps
gmake:警告:文件“Makefile”的修改时间为267秒
gmake[1]:警告:文件“CMakeFiles/Makefile2”的修改时间为267秒
gmake[2]:警告:文件“CMakeFiles/AwsCCommon.dir/progress.make”的修改时间为267秒
gmake[2]:警告:检测到时钟偏移。您的构建可能不完整。
gmake[2]:警告:文件“CMakeFiles/AwsCCommon.dir/progress.make”的修改时间为267秒
[4%]正在为“AwsCCommon”执行生成步骤
[1%]构建C对象CMakeFiles/aws-C-common.dir/source/array_list.C.o
在/usr/include/stdio.h:37:0中包含的文件中,
来自/workspace/dmoini/sdk_build/.deps/build/src/AwsCCommon/include/aws/common/common.h:22,
来自/workspace/dmoini/sdk_build/.deps/build/src/AwsCCommon/include/aws/common/array_list.h:18,
来自/workspace/dmoini/sdk_build/.deps/build/src/AwsCCommon/source/array_list.c:16:
/opt/gcc-5.1.0/lib/gcc/i386-pc-solaris2.11/5.1.0/include-fixed/sys/feature_测试。h:405:2:错误:#错误“编译器或选项对UNIX 03之前的X/Open应用程序和2001之前的POSIX应用程序无效”
#错误“编译器或选项对于UNIX 03之前的X/Open应用程序无效\
^
gmake[5]:***[CMakeFiles/aws-c-common.dir/build.make:63:CMakeFiles/aws-c-common.dir/source/array_list.c.o]错误1
gmake[4]:***[CMakeFiles/Makefile2:484:CMakeFiles/aws-c-common.dir/all]错误2
gmake[3]:***[Makefile:139:all]错误2
gmake[2]:***[CMakeFiles/AwsCCommon.dir/build.make:112:build/src/AwsCCommon stamp/AwsCCommon build]错误2
gmake[1]:***[CMakeFiles/Makefile2:68:CMakeFiles/AwsCCommon.dir/all]错误2
gmake:**[Makefile:84:all]错误2
CMakeLists.txt:193处的CMake错误(消息):
未能生成第三方库。
此外,以下是我的系统信息:

$uname-a
SunOS bld-dmoini-01-sv4b 5.11 omnios-r151020-4151d05 i86pc i386 i86pc

>非常感谢。

< P>我已经成功地完成了Solaris 11.4的安装中的AWS C++ SDK的编译,发现了一些可能引起问题的问题。 从一个干净的源代码树开始

删除
-Werror

要做的第一件事是删除
-Werror
编译器选项。默认情况下,Solaris 11.4上安装的OpenSSL版本有很多不推荐使用的函数,
-Werror
选项会导致生成在遇到这些不推荐使用时失败。我使用了从用于删除所有
-Werror
选项的AWS SDK源代码树:

vi `find . | xargs grep -l Werror`
您将获得大约三到四个文件,其中只有两个文件实际将
-Werror
设置为编译器选项。只需从这些文件中删除
“-Werror”
字符串

修复POSIX定义的问题

然后在最顶层的目录中运行
cmake.
。它将失败,因为它下载的cmake文件将具有不正确的POSIX命令行选项-
-D\u POSIX\u C\u SOURCE=200809L-D\u XOPEN\u SOURCE=500
。这
500
是错误的。
\u POSIX\u C\u SOURCE=200809L
对应于
\u XOPEN\u SOURCE=700
_XOPEN_SOURCE=500是。用C99编译SUSv2应用程序是不合适的

Per:

  • 对于C编程语言,在包含任何标题之前,应将
    \u POSIX\u C\u SOURCE
    定义为
    200809L
  • 以及:

  • 对于C编程语言,在包含任何标题之前,应将
    \u XOPEN\u SOURCE
    定义为
    700
  • Per(基于OpenSolaris,也是Solaris 11的基础):

    通过
    git
    下载的文件
    cmake
    需要编辑:

    vi `find .deps | xargs grep -l XOPEN_SOURCE`
    
    将任何
    -D\u XOPEN\u SOURCE=500
    更改为
    -D\u XOPEN\u SOURCE=700
    ,然后重新运行
    cmake.
    。这次应该会成功完成

    然后运行
    gmake
    (我发现
    gmake
    在Solaris上对几乎所有开源项目都更有效,因为许多开源项目都使用GNU特定的
    make
    扩展。)

    现在,您可以修复遇到的任何损坏的源代码

    修复损坏的源代码

    1

    具有以下错误代码:

    Aws::String ComputeOSVersionString()
    {
        utsname name;
        int32_t success = uname(&name);
    
    ,正确的类型是
    struct utsname
    ,而不仅仅是
    utsname

     int uname(struct utsname *name);
    
    AWS规范需要:

    Aws::String ComputeOSVersionString()
    {
        struct utsname name;
        int success = uname(&name);
    
    不,我肯定不会对AWS代码的质量留下深刻印象,因为:

    是的,一个实际的
    而(!feof())
    循环

    2

    该文件使用的枚举值为
    EBP
    ,与冲突

    我刚刚将其更改为
    EBP\u HASH
    ,因为这似乎与代码有些匹配:

    vi `find . | xargs grep -l EBP`
    
    3

    该文件创建了一个与冲突的枚举值
    ES
    。我刚刚添加了

    #ifdef ES
    #undef ES
    #endif 
    
    编译继续进行。我不知道那
    #unde
    是否会破坏任何东西

    4

    该文件的枚举值与冲突的
    ES
    GS
    SS
    枚举值

    再说一次,我只是
    vi `find . | xargs grep -l EBP`
    
    #ifdef ES
    #undef ES
    #endif 
    
    #ifdef ES
    #undef ES
    #endif
    
    #ifdef GS
    #undef GS
    #endif
    
    #ifdef SS
    #undef SS
    #endif
    
    #ifdef ES
    #undef ES
    #endif
    
    #ifdef GS
    #undef GS
    #endif
    
    #ifdef SS
    #undef SS
    #endif