如何使用编译器 g++-8.2 编译 Hazelcast C++ 客户端

How can I compile Hazelcast C++ Client with the compiler g++-8.2

对于使用 Hazelcast C++ client library 的项目,是否有任何解决方案可以使用 g++-8.2 进行编译?

如果我用g++-8.2编译它,它会显示很多错误"undefined reference ..."。

在使用g++-4.9时效果很好。

这个问题有点像这个google group forum中的讨论,说明编译错误是因为编译器的版本不对。

但是,编译器 g++-4.9 对我来说太旧了,无法构建我的大项目。

示例代码可以在official org website中找到,如果有人需要试一试。

感谢您报告此问题。我们没有使用 g++-8.2 编译器进行测试。我打开了一个问题来解决问题:https://github.com/hazelcast/hazelcast-cpp-client/issues/494

你能告诉我你的 OS 环境吗?它是什么发行版和版本?

我终于通过将库从 3.10 升级到 3.11 解决了这个问题。 3.11 库是使用 Github 中 Hazelcast source code 中的 g++-8.2 手动构建的。

因为构建hazelcast-cpp-clienet包后没有make install,所以我用一些脚本把header个文件放在一个目录下(hazelcast-cpp-client/include) 这样一个程序就可以轻松地 link 库和 headers.

构建脚本:

#!/bin/bash

# Package Requirements:
#   - asio

mkdir hazelcast-cpp-client ; cd hazelcast-cpp-client

# Build
git clone https://github.com/hazelcast/hazelcast-cpp-client.git
mv hazelcast-cpp-client tmp
cd tmp
git checkout v3.11
mkdir release ; cd release
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_BUILD_TYPE=Release ..
make


# Back to 'hazelcast-cpp-client' directory
cd ../..

# Copy .a library out from tmp/
cp tmp/release/*.a .

# Arrange all header files in an one directory  
cp -r tmp/hazelcast/include .
cp -r tmp/hazelcast/generated-sources/include/hazelcast/client/protocol ./include/hazelcast/client
rm tmp/external/include/*.md # We don't need readme file
cp -r tmp/external/include/* ./include

# Delete tmp directory
rm -rf tmp

编译命令如下:

g++ -std=c++11 \
    -I/path/to/hazelcast-cpp-client/include \
    hz_test.cpp \
    /path/to/hazelcast-cpp-client/libHazelcastClient3.11_64.a \
    -lpthread