Skip to content

Commit 569ad3f

Browse files
committed
fix(client-cpp): correct glibc224 CXX11 ABI check and Maven flag wiring
1 parent ac4e1fa commit 569ad3f

5 files changed

Lines changed: 35 additions & 12 deletions

File tree

.github/scripts/package-client-cpp-manylinux-glibc224.sh

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
set -euxo pipefail
1919

2020
MAX_GLIBC=2.24
21-
IOTDB_EXTRA_CXX_FLAGS=-D_GLIBCXX_USE_CXX11_ABI=1
2221

2322
MACHINE=$(uname -m)
2423
case "${MACHINE}" in
@@ -76,17 +75,29 @@ cd "${GITHUB_WORKSPACE:?GITHUB_WORKSPACE is not set}"
7675
./mvnw clean package -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests \
7776
-Dspotless.skip=true \
7877
-Dclient.cpp.package.classifier="${PACKAGE_CLASSIFIER}" \
79-
"-Diotdb.extra.cxx.flags=${IOTDB_EXTRA_CXX_FLAGS}"
78+
-Diotdb.libstdcxx.cxx11.abi=ON
8079

8180
SO="iotdb-client/client-cpp/target/install/lib/libiotdb_session.so"
8281
test -f "${SO}"
8382

84-
echo "=== libstdc++ ABI check (cxx11: must contain __cxx11) ==="
85-
if ! nm -C "${SO}" 2>/dev/null | grep -q '__cxx11'; then
86-
echo "ERROR: cxx11 ABI build must contain __cxx11 symbols in ${SO}"
87-
exit 1
83+
echo "=== libstdc++ ABI check (cxx11: mangled names must contain __cxx11) ==="
84+
# Use mangled symbol names: "nm -C" demangles std::__cxx11::basic_string to std::string
85+
# and hides __cxx11 even when the library was built with the new ABI.
86+
_abi_has_cxx11() {
87+
nm -a "$1" 2>/dev/null | grep -q '__cxx11'
88+
}
89+
if _abi_has_cxx11 "${SO}"; then
90+
echo "ABI check passed (__cxx11 in ${SO})"
91+
else
92+
SESSION_OBJ=$(find "${GITHUB_WORKSPACE}/iotdb-client/client-cpp/target" \
93+
-path '*/iotdb_session.dir/src/session/Session.cpp.o' -print -quit 2>/dev/null || true)
94+
if [[ -n "${SESSION_OBJ}" ]] && _abi_has_cxx11 "${SESSION_OBJ}"; then
95+
echo "ABI check passed (__cxx11 in ${SESSION_OBJ}; .so has minimal symbol table)"
96+
else
97+
echo "ERROR: cxx11 ABI build must contain __cxx11 symbols in ${SO} (or Session.cpp.o)"
98+
exit 1
99+
fi
88100
fi
89-
echo "ABI check passed (__cxx11 symbols present)"
90101

91102
echo "=== Build host glibc ==="
92103
ldd --version 2>&1 | sed -n '1p'

iotdb-client/client-cpp/CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,17 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
3232
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
3333
endif()
3434

35+
set(IOTDB_EXTRA_CXX_FLAGS ""
36+
CACHE STRING "Extra flags appended to CMAKE_CXX_FLAGS")
37+
option(IOTDB_LIBSTDCXX_CXX11_ABI
38+
"Use libstdc++ dual-ABI new layout (_GLIBCXX_USE_CXX11_ABI=1); release glibc224 zips"
39+
OFF)
40+
3541
if(NOT MSVC)
3642
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g -O2")
43+
if(IOTDB_LIBSTDCXX_CXX11_ABI)
44+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_GLIBCXX_USE_CXX11_ABI=1")
45+
endif()
3746
if(IOTDB_EXTRA_CXX_FLAGS)
3847
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IOTDB_EXTRA_CXX_FLAGS}")
3948
endif()
@@ -47,8 +56,6 @@ endif()
4756
option(WITH_SSL "Build with OpenSSL support" OFF)
4857
option(BUILD_TESTING "Build IT test executables" OFF)
4958
option(IOTDB_OFFLINE "Disable all network access during configure" OFF)
50-
set(IOTDB_EXTRA_CXX_FLAGS ""
51-
CACHE STRING "Extra flags appended to CMAKE_CXX_FLAGS (e.g. libstdc++ ABI for release zips)")
5259

5360
set(IOTDB_DEPS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third-party"
5461
CACHE PATH "Local tarball cache for third-party dependencies (lives under client-cpp/)")
@@ -187,3 +194,4 @@ message(STATUS " THRIFT_INCLUDE_DIR = ${THRIFT_INCLUDE_DIR}")
187194
message(STATUS " THRIFT_STATIC_LIB = ${THRIFT_STATIC_LIB_PATH}")
188195
message(STATUS " THRIFT_EXECUTABLE = ${THRIFT_EXECUTABLE}")
189196
message(STATUS " CMAKE_INSTALL_PREFIX = ${CMAKE_INSTALL_PREFIX}")
197+
message(STATUS " IOTDB_LIBSTDCXX_CXX11_ABI = ${IOTDB_LIBSTDCXX_CXX11_ABI}")

iotdb-client/client-cpp/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ Linux x86_64 (glibc 2.24 + CXX11 ABI — match `manylinux_2_24` release builds):
117117
```bash
118118
mvn -P with-cpp -pl iotdb-client/client-cpp -am -DskipTests \
119119
-Dclient.cpp.package.classifier=linux-x86_64-glibc224 \
120-
-Diotdb.extra.cxx.flags=-D_GLIBCXX_USE_CXX11_ABI=1 package
120+
-Diotdb.libstdcxx.cxx11.abi=ON package
121121
```
122122

123123
Linux x86_64 (glibc 2.17 + legacy ABI — CentOS 7 / manylinux2014):

iotdb-client/client-cpp/cmake/FetchThrift.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,9 @@ if(MSVC)
123123
"-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreadedDLL")
124124
else()
125125
set(_thrift_cxxflags "-fPIC")
126-
if(IOTDB_EXTRA_CXX_FLAGS MATCHES "_GLIBCXX_USE_CXX11_ABI=0")
126+
if(IOTDB_LIBSTDCXX_CXX11_ABI)
127+
set(_thrift_cxxflags "-D_GLIBCXX_USE_CXX11_ABI=1 -fPIC")
128+
elseif(IOTDB_EXTRA_CXX_FLAGS MATCHES "_GLIBCXX_USE_CXX11_ABI=0")
127129
set(_thrift_cxxflags "-D_GLIBCXX_USE_CXX11_ABI=0 -fPIC")
128130
elseif(IOTDB_EXTRA_CXX_FLAGS MATCHES "_GLIBCXX_USE_CXX11_ABI=1")
129131
set(_thrift_cxxflags "-D_GLIBCXX_USE_CXX11_ABI=1 -fPIC")

iotdb-client/client-cpp/pom.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@
5555
<!-- Optional convenience: when a user still passes -Dboost.include.dir=...
5656
(legacy CLI from the old build), feed it to CMake as BOOST_INCLUDEDIR. -->
5757
<boost.include.dir></boost.include.dir>
58-
<!-- Release Linux glibc224: -Diotdb.extra.cxx.flags=-D_GLIBCXX_USE_CXX11_ABI=1 -->
58+
<!-- Release Linux glibc224: -Diotdb.libstdcxx.cxx11.abi=ON -->
59+
<iotdb.libstdcxx.cxx11.abi>OFF</iotdb.libstdcxx.cxx11.abi>
5960
<iotdb.extra.cxx.flags></iotdb.extra.cxx.flags>
6061
<!-- Override via -Dclient.cpp.package.classifier=... for per-toolchain release zips. -->
6162
<client.cpp.package.classifier>${os.classifier}</client.cpp.package.classifier>
@@ -94,6 +95,7 @@
9495
<option>-DIOTDB_DEPS_DIR=${iotdb.deps.dir}</option>
9596
<option>-DBOOST_INCLUDEDIR=${boost.include.dir}</option>
9697
<option>-DCMAKE_POLICY_DEFAULT_CMP0091=NEW</option>
98+
<option>-DIOTDB_LIBSTDCXX_CXX11_ABI=${iotdb.libstdcxx.cxx11.abi}</option>
9799
<option>-DIOTDB_EXTRA_CXX_FLAGS=${iotdb.extra.cxx.flags}</option>
98100
</options>
99101
</configuration>

0 commit comments

Comments
 (0)