0

我正在 Linux 上构建 Java 应用程序并通过 JNI 调用 CPP 代码。当我将我的 CPP 对象与 libaws-cpp-sdk-core.so 链接时,我得到未解析的符号:

Aws::Utils::Json::JsonValue::JsonValue(std::__cxx11::basic_string, std::allocator > const&)

aws-spp-sdk-core.so 中的符号几乎匹配: T Aws::Utils::Json::JsonValue::JsonValue(std::__cxx11::basic_string, Aws::Allocator > const&)

除了它是 Aws::Allocator 而不是 std::allocator 所以我尝试同时传递 AWSD ::String 和 std::string 但没有帮助

问题 sysmbol 来自以下调用 AWS::Utils::Json::JsonValue() 的代码:

JNIEXPORT jstring JNICALL Java_CCBJNI_labToMix(JNIEnv * env, jobject thisObj, jstring jcolor) {

Aws::Utils::Json::JsonValue labjson;
Aws::Utils::Json::JsonView labview;

string line;
Aws::String const& aws_line(line); 
labjson = Aws::Utils::Json::JsonValue(aws_line);
return NULL;

}

我已经在 Linux 上从源代码构建了 AWSSDK,并尝试在所有生成的 .so 库中进行链接,我已经安装了先决条件: $sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev zlib1g-dev libpulse-dev works在使用 nuget 包管理器的 Windows 上,其他 AWS 调用正在工作,但不是这个。

谢谢你的帮助

4

1 回答 1

0

构建 libaws-cpp-sdk-core.so 时需要关闭 CUSTOM_MEMORY_MANAGEMENT。构建共享库时默认开启。libaws-cpp-sdk-core 的正确构建步骤:

  1. 安装先决条件: $sudo apt-get install libcurl4-openssl-dev libssl-dev uuid-dev zlib1g-dev libpulse-dev
  2. 克隆 awssdk:$git 克隆https://github.com/aws/aws-sdk-cpp.git
  3. 安装 cmake: $sudo apt install cmake
  4. $cd aws-cpp-sdk
  5. 须藤 cmake 。-DBUILD_ONLY="核心" -DBUILD_SHARED_LIBS=ON -DENABLE_UNITY_BUILD=ON -DCUSTOM_MEMORY_MANAGEMENT=OFF
  6. 须藤制作
  7. 须藤使安装
于 2020-05-14T00:33:37.597 回答