Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

centos6 build and link grpc-rs source code error: undefined reference to `__gxx_personality_v0' #110

Closed
dllhlx opened this issue Nov 14, 2017 · 15 comments

Comments

@dllhlx
Copy link

dllhlx commented Nov 14, 2017

hi, I use grpc-rs source code as grpcio's patch in my rust project, after complie succ . the link occur error, detail as below:
the grpcio use method in my project Cargo.toml is

...
[dependencies]
grpcio = "*"
...
[patch.crates-io]
grpcio = { path = "./grpc-rs" }

My build machine os is centos 6, I upgrade the default gcc/g++ version from 4.47 to 4.8.2:

wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
yum install devtoolset-2-gcc devtoolset-2-binutils
yum install devtoolset-2-gcc-c++ devtoolset-2-binutils
scl enable devtoolset-2 bash

and then upgrade cmake version to 3.10.0-rc4.
Then the compile process of my project is completed succ, but the final link process is error:

Running `rustc --crate-name tt_agentd src/bin/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=329f339b6b95c21e -C extra-filename=-329f339b6b95c21e --out-dir /tmp/multipkg/build/tt/target/debug/deps -L dependency=/tmp/multipkg/build/tt/target/debug/deps --extern chrono=/tmp/multipkg/build/tt/target/debug/deps/libchrono-83f205826c8cbe4a.rlib --extern clap=/tmp/multipkg/build/tt/target/debug/deps/libclap-fdb8754d03fe468d.rlib --extern flate2=/tmp/multipkg/build/tt/target/debug/deps/libflate2-ada67b65e8687c66.rlib --extern toml=/tmp/multipkg/build/tt/target/debug/deps/libtoml-01d27e87266f3d49.rlib --extern error_chain=/tmp/multipkg/build/tt/target/debug/deps/liberror_chain-ce7184105e3bc4f5.rlib --extern walkdir=/tmp/multipkg/build/tt/target/debug/deps/libwalkdir-d5b4fa10edee569d.rlib --extern protobuf=/tmp/multipkg/build/tt/target/debug/deps/libprotobuf-328e3d5ed8378a3e.rlib --extern serde=/tmp/multipkg/build/tt/target/debug/deps/libserde-0291d3120fb722a9.rlib --extern futures=/tmp/multipkg/build/tt/target/debug/deps/libfutures-1b9182b76cdcf9bb.rlib --extern tar=/tmp/multipkg/build/tt/target/debug/deps/libtar-2709790813f55833.rlib --extern tempdir=/tmp/multipkg/build/tt/target/debug/deps/libtempdir-8121eea7baa9d710.rlib --extern grpcio=/tmp/multipkg/build/tt/target/debug/deps/libgrpcio-764d63f6dc20aa0a.rlib --extern hostname=/tmp/multipkg/build/tt/target/debug/deps/libhostname-dc250aee9cb87a9a.rlib --extern tt_proto=/tmp/multipkg/build/tt/target/debug/deps/libtt_proto-6fcd2500f251c566.rlib --extern serde_json=/tmp/multipkg/build/tt/target/debug/deps/libserde_json-ca366df264a2aff6.rlib --extern lazy_static=/tmp/multipkg/build/tt/target/debug/deps/liblazy_static-32480de9118a066c.rlib --extern crypto=/tmp/multipkg/build/tt/target/debug/deps/libcrypto-1dcbab75c663e65b.rlib --extern log=/tmp/multipkg/build/tt/target/debug/deps/liblog-76d0e5da518c9890.rlib --extern env_logger=/tmp/multipkg/build/tt/target/debug/deps/libenv_logger-30dd2c8d8b73c017.rlib --extern daemonize=/tmp/multipkg/build/tt/target/debug/deps/libdaemonize-2ee63a9a17dd392a.rlib --extern serde_derive=/tmp/multipkg/build/tt/target/debug/deps/libserde_derive-3331a53d2a1fcf4d.so --extern rayon=/tmp/multipkg/build/tt/target/debug/deps/librayon-4d01f1358960ca65.rlib --extern log4rs=/tmp/multipkg/build/tt/target/debug/deps/liblog4rs-f6ef6bdbff08160d.rlib --extern tt=/tmp/multipkg/build/tt/target/debug/deps/libtt-aee6ced0a9b80889.rlib -L native=/tmp/multipkg/build/tt/target/debug/build/backtrace-sys-943860c9c514961f/out/.libs -L native=/tmp/multipkg/build/tt/target/debug/build/miniz-sys-c1d19ab19aea7dca/out -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/cares -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/zlib -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/boringssl/ssl -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/boringssl/crypto -L native=/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out -L native=/tmp/multipkg/build/tt/target/debug/build/rust-crypto-c61e52eda4d55a33/out`
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/tmp/multipkg/build/tt/target/debug/deps/tt_agentd-329f339b6b95c21e.0.o" "-o" "/tmp/multipkg/build/tt/target/debug/deps/tt_agentd-329f339b6b95c21e" "/tmp/multipkg/build/tt/target/debug/deps/tt_agentd-329f339b6b95c21e.crate.allocator.o" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "-L" "/tmp/multipkg/build/tt/target/debug/deps" "-L" "/tmp/multipkg/build/tt/target/debug/build/backtrace-sys-943860c9c514961f/out/.libs" "-L" "/tmp/multipkg/build/tt/target/debug/build/miniz-sys-c1d19ab19aea7dca/out" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/cares" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/zlib" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/boringssl/ssl" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out/build/third_party/boringssl/crypto" "-L" "/tmp/multipkg/build/tt/target/debug/build/grpcio-sys-a451e038565f03cc/out" "-L" "/tmp/multipkg/build/tt/target/debug/build/rust-crypto-c61e52eda4d55a33/out" "-L" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/tmp/multipkg/build/tt/target/debug/deps/libtt-aee6ced0a9b80889.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libcrypto-1dcbab75c663e65b.rlib" "/tmp/multipkg/build/tt/target/debug/deps/librayon-4d01f1358960ca65.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libwalkdir-d5b4fa10edee569d.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libsame_file-51f0c58ca561678c.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libdaemonize-2ee63a9a17dd392a.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liberror_chain-ce7184105e3bc4f5.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libbacktrace-0a24a00d800c5483.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libcfg_if-39407a6f5c167a50.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblog4rs-f6ef6bdbff08160d.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libserde_value-b4c3e2e6c4050fd6.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libordered_float-20975675ecb44655.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libserde_yaml-956020bc20e32987.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libyaml_rust-538e4354afb6f8e7.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblinked_hash_map-1d5a8c1b2061c143.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libtypemap-fb4413453ccfec24.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libunsafe_any-7e9009d4aefe1b79.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libtraitobject-72ce215889980bac.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libfnv-ce6acad4e6f3bda9.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libcrossbeam-c2ae04e975406371.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libantidote-f05920b405dc5e0e.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblog_mdc-5d3a1a124d9e6986.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libtt_proto-6fcd2500f251c566.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libgrpcio-764d63f6dc20aa0a.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libgrpcio_sys-6ef1eac6776f3a8d.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libfutures-1b9182b76cdcf9bb.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libprotobuf-328e3d5ed8378a3e.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblog-76d0e5da518c9890.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libbacktrace_sys-d7c5f51e838320b6.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libserde_json-ca366df264a2aff6.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libdtoa-c31ef64067a24d52.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libitoa-bb9fe302248b7433.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libserde-0291d3120fb722a9.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libhostname-dc250aee9cb87a9a.rlib" "/tmp/multipkg/build/tt/target/debug/deps/librustc_serialize-5c7e94e54f3b2493.rlib" "/tmp/multipkg/build/tt/target/debug/deps/librustc_demangle-83d9ff7249781958.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libhumantime-f510abbb8fd521fa.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libquick_error-bbcdf42bf963990f.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libchrono-6e3e657de0abbfe7.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libnum-7010fdbf340ca145.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libnum_iter-26dbda985b5a9acf.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libnum_integer-97e8ea1ab5063056.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libnum_traits-6fd04028b4ec4415.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libtime-0cd5fac6e6ca5103.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libflate2-ada67b65e8687c66.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libminiz_sys-50ff439e51f909c5.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblinked_hash_map-1b499928685848af.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libunreachable-3bde6d0dca5f0eff.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libvoid-4861444fc46bd06e.rlib" "/tmp/multipkg/build/tt/target/debug/deps/librayon_core-3f80a41970af947d.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libnum_cpus-2f6edb1d9f9d0ac0.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblazy_static-32480de9118a066c.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libcoco-bc6af71e91a88e9c.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libscopeguard-a99cb6da8aacdf01.rlib" "/tmp/multipkg/build/tt/target/debug/deps/libeither-8b850cc8c54085ac.rlib" "/tmp/multipkg/build/tt/target/debug/deps/librand-b0b8180ea869605f.rlib" "/tmp/multipkg/build/tt/target/debug/deps/liblibc-42ccb1ab9c602896.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-8eeda694d27cc3ba.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-d9be38a491a6b20b.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_jemalloc-7df0812865be3e74.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-1768097fd1bb5d0a.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc_system-38bc2ffba7aac62a.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-d4f79324c33264e2.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-e2edf8b78eb9a037.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_unicode-29181a531b1322da.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/librand-30d6b4a7069ee56b.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-ac3876fe094f9f74.rlib" "/usr/local/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-4917ae9e58e9366a.rlib" "-Wl,-Bdynamic" "-l" "util" "-l" "util" "-l" "dl" "-l" "rt" "-l" "pthread" "-l" "pthread" "-l" "gcc_s" "-l" "c" "-l" "m" "-l" "rt" "-l" "pthread" "-l" "util"
  = note: /tmp/multipkg/build/tt/target/debug/deps/libgrpcio_sys-6ef1eac6776f3a8d.rlib(lame_client.cc.o):(.data.DW.ref.__gxx_personality_v0[DW.ref.__gxx_personality_v0]+0x0): undefined reference to `__gxx_personality_v0'
          collect2: error: ld returned 1 exit status
          

error: aborting due to previous error

error: Could not compile `tt`.

Besides, in centos 7 machine, the build and link is ok.

@dllhlx
Copy link
Author

dllhlx commented Nov 14, 2017

Moreover, I find grpcio 0.1.2 in centos 6 can not installed correct:

running: "cmake" "--build" "." "--target" "grpc" "--config" "Debug" "--"
Scanning dependencies of target pkcs8_lib
[  0%] Building C object third_party/boringssl/crypto/pkcs8/CMakeFiles/pkcs8_lib.dir/pkcs8.c.o

--- stderr
CMake Warning at CMakeLists.txt:120 (message):
  gRPC_INSTALL will be forced to FALSE because gRPC_ZLIB_PROVIDER is "module"


CMake Warning at CMakeLists.txt:196 (message):
  gRPC_PROTOBUF_PROVIDER is "module" but PROTOBUF_ROOT_DIR is wrong


CMake Warning at CMakeLists.txt:265 (message):
  gRPC_GFLAGS_PROVIDER is "module" but GFLAGS_ROOT_DIR is wrong


CMake Warning at CMakeLists.txt:285 (message):
  gRPC_BENCHMARK_PROVIDER is "module" but BENCHMARK_ROOT_DIR is wrong


cc1: warnings being treated as errors
In file included from /home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/../include/openssl/x509.h:82,
                 from /home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/../include/openssl/pkcs8.h:61,
                 from /home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/pkcs8/pkcs8.c:56:
/home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/../include/openssl/sha.h:111: error: declaration does not declare anything
/home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/../include/openssl/sha.h:112: error: declaration does not declare anything
In file included from /home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/pkcs8/pkcs8.c:75:
/home/.cargo/registry/src/github.com-1ecc6299db9ec823/grpcio-sys-0.1.2/grpc/third_party/boringssl/crypto/pkcs8/../internal.h:123:22: error: stdalign.h: No such file or directory
gmake[3]: *** [third_party/boringssl/crypto/pkcs8/CMakeFiles/pkcs8_lib.dir/pkcs8.c.o] Error 1
gmake[2]: *** [third_party/boringssl/crypto/pkcs8/CMakeFiles/pkcs8_lib.dir/all] Error 2
gmake[1]: *** [CMakeFiles/grpc.dir/rule] Error 2
gmake: *** [grpc] Error 2
thread 'main' panicked at '
command did not execute successfully, got: exit code: 2

build script failed, must exit now', /home/.cargo/registry/src/github.com-1ecc6299db9ec823/cmake-0.1.27/src/lib.rs:627:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.

warning: build failed, waiting for other jobs to finish...
error: build failed

os is CentOS release 6.4 (Final)

@siddontang
Copy link
Contributor

/cc @BusyJay

@BusyJay
Copy link
Member

BusyJay commented Nov 15, 2017

It seems that the upstream mixes C and C++ sources together however grpc-rs treat them all as C. The master branch of grpc has changed all grpc core sources to C++ now, so it would be better to enable C++ mode by default in grpc-rs. /cc @overvenus

@dllhlx
Copy link
Author

dllhlx commented Nov 15, 2017

@BusyJay @overvenus can add -lstdc++ in make option to solve this problem?

@BusyJay
Copy link
Member

BusyJay commented Nov 15, 2017

I guess it should work. Or you can set cpp to true.

@dllhlx
Copy link
Author

dllhlx commented Nov 15, 2017

@BusyJay I modify the code grpc-rs/grpc-sys/build.sh

....
fn build_grpc(cc: &mut Build) {
....
cc.cpp(true).include("grpc/include");
}
....

then cargo build in grpc-rs then error occur:

running: "c++" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-g" "-m64" "-I" "grpc/include" "-Wall" "-Wextra" "-Werror" "-o" "/tmp/multipkg/build/titan-agent/grpc-rs/target/debug/build/grpcio-sys-e9f32844e0a281f5/out/grpc_wrap.o" "-c" "grpc_wrap.c"
cargo:warning=grpc_wrap.c: In function ‘grpcwrap_batch_context* grpcwrap_batch_context_create()’:
cargo:warning=grpc_wrap.c:104:74: error: invalid conversion from ‘void*’ to ‘grpcwrap_batch_context*’ [-fpermissive]
cargo:warning=   grpcwrap_batch_context *ctx = gpr_malloc(sizeof(grpcwrap_batch_context));
cargo:warning=                                                                          ^
cargo:warning=grpc_wrap.c: In function ‘grpcwrap_request_call_context* grpcwrap_request_call_context_create()’:
cargo:warning=grpc_wrap.c:118:55: error: invalid conversion from ‘void*’ to ‘grpcwrap_request_call_context*’ [-fpermissive]
cargo:warning=       gpr_malloc(sizeof(grpcwrap_request_call_context));
cargo:warning=                                                       ^
cargo:warning=grpc_wrap.c: In function ‘grpc_server_credentials* grpcwrap_ssl_server_credentials_create(const char*, const char**, const char**, size_t, int)’:
cargo:warning=grpc_wrap.c:801:73: error: invalid conversion from ‘void*’ to ‘grpc_ssl_pem_key_cert_pair*’ [-fpermissive]
cargo:warning=       gpr_malloc(sizeof(grpc_ssl_pem_key_cert_pair) * num_key_cert_pairs);
cargo:warning=                                                                         ^
exit code: 1

--- stderr
CMake Warning at CMakeLists.txt:120 (message):
  gRPC_INSTALL will be forced to FALSE because gRPC_ZLIB_PROVIDER is "module"

@dllhlx
Copy link
Author

dllhlx commented Nov 15, 2017

After I fix the invalid conversion in grpc-syc/grpc_wrap.c, the error above is ok, but new error is comming:

....
grpc-rs/src/call/client.rs:105: undefined reference to `grpcwrap_call_start_unary'
grpc-rs/src/channel.rs:457: undefined reference to `grpcwrap_channel_create_call'
grpc-rs/src/call/server.rs:60: undefined reference to `grpcwrap_request_call_context_create'
grpc-rs/src/channel.rs:420: undefined reference to `grpcwrap_channel_args_destroy'
...

so I think if the grpc change so grpc-rs should also change. some code need update.

@BusyJay
Copy link
Member

BusyJay commented Nov 15, 2017

Did you find these functions in grpc_wrap.c?

@BusyJay
Copy link
Member

BusyJay commented Nov 15, 2017

Oh, I get it. That's because C++ compiler will mangle the symbol name, so just switching to C++ is not enough. For simplicity, maybe you can try to just link to stdc++ instead.

@dllhlx
Copy link
Author

dllhlx commented Nov 15, 2017

@BusyJay I try use stdc++ before

....
fn build_grpc(cc: &mut Build) {
....
cc.cpp(true).cpp_set_stdlib("stdc++").include("grpc/include");
}
....

but another error occur:

cargo:warning=c++: error: unrecognized command line option ‘-stdlib=libstdc++’

if I use stdc++ like

....
fn build_grpc(cc: &mut Build) {
....
cc.cpp(true).cpp_link_stdlib("stdc++").include("grpc/include");
}
....

then mutiple undefined reference to xxxx error still exist.

@dllhlx
Copy link
Author

dllhlx commented Nov 15, 2017

@BusyJay is there any old branch or tag can use gcc build instead of g++ in https://github.com/pingcap/grpc/?

@BusyJay
Copy link
Member

BusyJay commented Nov 16, 2017

No, you should use cargo:rustc-link-lib to specify which library to link to. See Build Script for more information.

@dllhlx
Copy link
Author

dllhlx commented Nov 16, 2017

@BusyJay I think i have solved the el6 build problem after modify grpc-sys/build.rs

...
 cc.cpp(true).cpp_link_stdlib("stdc++").include("grpc/include");
...

and modify grpc-sys/grpc_wrap.c:

...
ifdef __cplusplus 
extern "C" { 
#endif 
...
#ifdef __cplusplus 
}
#endif 

@BusyJay
Copy link
Member

BusyJay commented Nov 16, 2017

Glad to hear it!

@dllhlx
Copy link
Author

dllhlx commented Nov 16, 2017

@BusyJay thanks for your help, I think this issue can be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants