pulsar: pulsar-client-cpp not able to build with static link

Expected behavior

Build pulsar-client-cpp lib with static linking all libs.

Set LINK_STATIC to ON in CMakeList.txt and run ./docker-build.sh, expect to build the cpp client lib with static linking.

Actual behavior

Build failed.

Steps to reproduce

In pulsar/pulsar-client-cpp/

$ git diff CMakeLists.txt diff --git a/pulsar-client-cpp/CMakeLists.txt b/pulsar-client-cpp/CMakeLists.txt index 38a47742…7fb08401 100644 — a/pulsar-client-cpp/CMakeLists.txt +++ b/pulsar-client-cpp/CMakeLists.txt @@ -24,7 +24,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} “${CMAKE_SOURCE_DIR}/cmake_modules”) option(BUILD_TESTS “Build tests” ON) MESSAGE(STATUS "BUILD_TESTS: " ${BUILD_TESTS})

-option(LINK_STATIC “Link against static libraries” OFF) +option(LINK_STATIC “Link against static libraries” ON) MESSAGE(STATUS "LINK_STATIC: " ${LINK_STATIC})

option(USE_LOG4CXX “Build with Log4cxx support” OFF) $ ./docker-build.sh … [ 38%] Linking CXX shared library libpulsar.so … /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/…/…/…/x86_64-linux-gnu/libboost_filesystem.a(operations.o): relocation R_X86_64_32 against `.rodata.str1.1’ can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-linux-gnu/5/…/…/…/x86_64-linux-gnu/libboost_filesystem.a: error adding symbols: Bad value collect2: error: ld returned 1 exit status lib/CMakeFiles/pulsarShared.dir/build.make:2097: recipe for target ‘lib/libpulsar.so.2.1.0-incubating-SNAPSHOT’ failed make[2]: *** [lib/libpulsar.so.2.1.0-incubating-SNAPSHOT] Error 1 make[2]: Leaving directory ‘/pulsar/pulsar-client-cpp’ CMakeFiles/Makefile2:158: recipe for target ‘lib/CMakeFiles/pulsarShared.dir/all’ failed make[1]: *** [lib/CMakeFiles/pulsarShared.dir/all] Error 2 make[1]: Leaving directory ‘/pulsar/pulsar-client-cpp’ Makefile:86: recipe for target ‘all’ failed make: *** [all] Error 2

System configuration

Pulsar version: 2.0

About this issue

  • Original URL
  • State: closed
  • Created 6 years ago
  • Comments: 15 (9 by maintainers)

Most upvoted comments

@f7753 You can update clang-format version, because in CMakeLists.txt:

# `make format` option
if (NOT APPLE AND NOT WIN32)
    set(CLANG_FORMAT_VERSION "5.0")
endif()

Or, we can ignore make check-format. In centos7 OS, the default version of clang is 3.4.2


Then in apachepulsar/pulsar-build:centos-7 image, when i exec make -j12, error as follows:

[root@1fc7007643de pulsar-client-cpp]# make -j12
[ 86%] Built target pulsarShared
[ 86%] Built target pulsarStatic
[ 87%] Built target SampleConsumerListenerCApi
[ 91%] Built target SampleConsumerCApi
[ 91%] Built target SampleProducer
[ 89%] Built target SampleProducerCApi
[ 91%] Built target SampleConsumerListener
[ 93%] Built target SampleConsumer
[ 89%] Built target SampleAsyncProducer
[ 94%] Built target perfProducer
[ 93%] Built target SampleReaderCApi
[ 95%] Built target perfConsumer
[ 95%] Linking CXX shared library _pulsar.so
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[2]: *** [python/_pulsar.so] Error 1
make[1]: *** [python/CMakeFiles/_pulsar.dir/all] Error 2
make: *** [all] Error 2

I tried to exec yum install -y libstdc++-static.x86_64, this problem was fixed.

BTW, when I compile these code in docker environment, I use the default CPU resource settings, and then I compile with the param -j12, it would throw the error below:

c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugzilla.redhat.com/bugzilla> for instructions.
make[2]: *** [lib/CMakeFiles/pulsarShared.dir/BatchMessageContainer.cc.o] Error 4
make[2]: *** Waiting for unfinished jobs....

So, if you see the log above, please make sure that your compile params match the docker resource settings.

root@5b71bc487c67:/usr2/code/pulsar-2.10.1.6/pulsar-client-cpp# cmake . -DBUILD_TESTS=OFF – ARCHITECTURE: x86_64 – BUILD_DYNAMIC_LIB: ON – BUILD_STATIC_LIB: ON – BUILD_TESTS: OFF – BUILD_PYTHON_WRAPPER: ON – BUILD_WIRESHARK: OFF – BUILD_PERF_TOOLS: OFF – LINK_STATIC: OFF – USE_LOG4CXX: OFF – CMAKE_BUILD_TYPE: RelWithDebInfo – Threads library: -pthread Failed to find Protobuf in config mode, try to find it from system path – Protobuf_LIBRARIES: /usr/lib/x86_64-linux-gnu/libprotobuf.so – Protobuf_INCLUDE_DIRS: /usr/include – Found Boost: /usr/include (found version “1.71.0”) – Using std::regex – PYTHON: 3.8.10 – DETECTED Python 3 – BOOST_PYTHON_NAME_FOUND: python38 – Found Boost: /usr/include (found version “1.71.0”) found components: python38 – HAS_ZSTD: 0 – HAS_SNAPPY: 0 – Using Boost Python libs: /usr/lib/x86_64-linux-gnu/libboost_python38.so clang-tidy not found clang-format not found CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: GMOCK_INCLUDE_PATH used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/lib used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/examples used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python used as include directory in directory /usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/python

– Configuring incomplete, errors occurred! See also “/usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/CMakeFiles/CMakeOutput.log”. See also “/usr2/code/pulsar-2.10.1.6/pulsar-client-cpp/CMakeFiles/CMakeError.log”.


i set -DBUILD_TESTS=OFF ,but met the error too.