proxy-wasm / proxy-wasm-cpp-sdk

WebAssembly for Proxies (C++ SDK)
Apache License 2.0
140 stars 68 forks source link

wasm-ld: error: /sdk/libprotobuf.a(common.o): undefined symbol #141

Closed GOVYANSONG closed 2 years ago

GOVYANSONG commented 2 years ago

I am trying to experiment with the proxy wasm c++ sdk. my system: Linux mk8smaster 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux. Run command: docker run -v $PWD:/work -w /work wasmsdk:v2 /build_wasm.sh. Got following warnings and errors:

wasm-ld: warning: Linking two modules of different data layouts: '/sdk/libprotobuf.a(any.o at 3275502)' is 'e-m:e-p:32:32-i64:64-n32:64-S128' whereas 'ld-temp.o' is 'e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-f128:64-n32:64-S128-ni:1:10:20' ...... wasm-ld: error: /sdk/libprotobuf.a(common.o): undefined symbol: std::2::basic_string<char, std::__2::char_traits, std::2::allocator >::basic_string(std::2::basic_string<char, std::__2::char_traits, std::2::allocator > const&) ......

Thanks for any assistance

GOVYANSONG commented 2 years ago

While searching for solution, I stumbled upon another sample project: https://github.com/salrashid123/envoy_wasm. this one offers better clarity around envoy wasm bazel build. I was able to build and run the sample wasm without any issue. I will attempt to build the wasm in my original post and update status.

GOVYANSONG commented 2 years ago

I was able to adapt my original sample project to utilize envoy wasm bazel build. bazel BUILD file attached herein for reference:

load("@bazel_skylib//lib:selects.bzl", "selects") load( "//bazel:envoy_build_system.bzl", "envoy_package", ) load("//bazel/wasm:wasm.bzl", "envoy_wasm_cc_binary") load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library")

licenses(["notice"]) # Apache 2

envoy_package()

selects.config_setting_group( name = "include_wasm_config", match_all = [ "//bazel:x86", "//bazel:wasm_v8", ], )

filegroup( name = "configs", srcs = glob([ "/*.wasm", ]) + select({ ":include_wasm_config": glob( [ "*/.yaml", ], exclude = [ "/docker-compose.yaml", ], ), "//conditions:default": [], }), )

envoy_wasm_cc_binary( name = "main.wasm", srcs = ["transform_filter.cc"], deps = [ "@proxy_wasm_cpp_sdk//:proxy_wasm_intrinsics_lite", "//examples/transform_filter:transform_cc_proto",
], )

filegroup( name = "files", srcs = glob(["*/"]), )

proto_library( name = "transform_proto", srcs = ["transform.proto"], visibility = ["//visibility:public"], )

cc_proto_library( name = "transform_cc_proto", deps = [ ":transform_proto", ], visibility = ["//visibility:public"], )