Amazon s3 如何构建AWS C++;Solaris上的SDK?
我试图在Solaris上构建AWS C++ SDK,但我不能成功地完成。 我在AWS C++ 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 --配置完
$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:
\u POSIX\u C\u SOURCE
定义为200809L
\u XOPEN\u SOURCE
定义为700
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