如何使用编译器g ++-8.2

时间:2018-12-26 03:21:07

标签: c++ compiler-errors g++ hazelcast

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

如果我使用 g ++-8.2 进行编译,则会显示很多错误“ undefined reference ...”。

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

问题有点像本google group forum中的讨论,该问题表明编译错误是由于编译器版本错误引起的。

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

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

2 个答案:

答案 0 :(得分:1)

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

因为构建 hazelcast-cpp-clienet 软件包后没有make install,所以我使用一些脚本将头文件一起放在一个目录(hazelcast-cpp-client/include)中,以便程序可以轻松地链接库和标头。

构建脚本:

#!/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

答案 1 :(得分:0)

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

您能告诉我您的操作系统环境吗?它是什么发行版和版本?