由于严重缺乏文档,我使用AWS C ++ SDK遇到了一些麻烦。但是我设法在我的计算机上编译并安装它。
我现在努力让一个程序工作并解决了很多问题,但是(希望)最后一个仍然是我无法独自战胜......
以下是代码:
#include <aws/s3/model/GetObjectRequest.h>
int main()
{
Aws::S3::Model::GetObjectRequest getObjectRequest;
}
我试图为我的例子提供最简单的代码。该代码无法编译,我收到了以下错误:
CMakeFiles/example.dir/example.cpp.o:(.rodata._ZTIN3Aws2S39S3RequestE[_ZTIN3Aws2S39S3RequestE]+0x10): undefined reference to `typeinfo for Aws::AmazonSerializableWebServiceRequest'
我不知道问题所在。我尝试检查库的源代码,GetObjectRequest类中没有纯虚函数。我想我正确地链接了库。这是我的CMakeLists.txt:
project( TEST_AWS )
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
add_definitions ( -Wall -Wextra )
set(LIBAWSSDK_INCLUDE_DIR /usr/local/include/ CACHE STRING "aws SDK include directories")
set(LIBAWSSDK_CORE_LIB "-l:/usr/local/lib/libaws-cpp-sdk-core.so" CACHE STRING "aws SDK core link lib")
set(LIBAWSSDK_S3_LIB "-l:/usr/local/lib/libaws-cpp-sdk-s3.so" CACHE STRING "aws SDK S3 link lib")
set(target_external_libraries
${LIBAWSSDK_CORE_LIB}
${LIBAWSSDK_S3_LIB}
)
include_directories(
${LIBAWSSDK_INCLUDE_DIR}
)
add_executable( example example.cpp )
target_link_libraries( example ${target_external_libraries} )
target_compile_features(example PRIVATE cxx_lambdas)
我知道我用cmake链接库的方式有点脏,但目前我只想编译代码......
答案 0 :(得分:0)
如果您使用的是CMake,我建议您使用SDK中的cmake导出文件,以避免弄清楚我们使用的是什么。 https://aws.amazon.com/blogs/developer/using-cmake-exports-with-the-aws-sdk-for-c/
-fno-rtti标志将被删除并更改为可选的CMake标志。
如果您使用CMake导出,它将正确生成您的Visual Studio解决方案。
更新:
已使用最新版本
修复此问题答案 1 :(得分:0)
非常重要:如果您正在使用RTTI(-frtti)进行编译,请确保您的依赖库也使用它进行编译,而不是-fno-rtti。否则,在子类化使用-fno-rtti编译的类或使用dynamic_cast时,将获得typeinfo错误。 (C++: what are the causes of " undefined reference to 'typeinfo for [class name]' "other than virtual functions)
所以,-fno-rtti只有在你编译aws-sdk时才有效
现在,在大多数情况下,您将使用许多其他库来编译aws-sdk。大多数库,opencv等都是用-frtti编译的。如果用-fno-rtti编译aws-sdk,那么你将得到上面的typeinfo madness错误
解决方案:查看最新的aws-sdk-cpp(截至6月1日)。它使用-frtti选项..然后链接它,生活是好的