Skip to content

Commit 36c50b7

Browse files
committed
Only export JNI and C-API symbols
Currently libduckdb_java.so shared lib exports all symbols. This is not good for a library that needs to be loaded into JVM process. Proposed change makes the shared lib to only export the JNI and C-API symbols. C-API symbols are exported with the intention to be used by C-API-based extensions. Testing: no functional changes, no new tests. Fixes: #102
1 parent aaacc82 commit 36c50b7

File tree

5 files changed

+1393
-2
lines changed

5 files changed

+1393
-2
lines changed

CMakeLists.txt

+16-1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ if(MSVC)
100100
src/duckdb/extension/jemalloc/jemalloc/src/util.c
101101
src/duckdb/extension/jemalloc/jemalloc/src/witness.c
102102
src/duckdb/extension/jemalloc/jemalloc/src/zone.c )
103+
list(APPEND DUCKDB_SRC_FILES duckdb_java.def)
103104
add_definitions(/bigobj /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
104105
else()
105106
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG ")
@@ -152,9 +153,23 @@ add_library(duckdb_java SHARED
152153
src/jni/refs.cpp
153154
src/jni/util.cpp
154155
${DUCKDB_SRC_FILES})
155-
target_compile_options(duckdb_java PRIVATE -fexceptions)
156+
target_compile_definitions(duckdb_java PRIVATE -DDUCKDB_STATIC_BUILD)
156157
target_link_libraries(duckdb_java duckdb-native )
157158
target_link_libraries(duckdb_java ${DUCKDB_SYSTEM_LIBS})
159+
if(NOT WIN32)
160+
target_compile_options(duckdb_java PRIVATE -fexceptions)
161+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
162+
target_link_options(duckdb_java PRIVATE
163+
-Bsymbolic
164+
-Bsymbolic-functions
165+
-fvisibility=hidden
166+
-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/duckdb_java.map)
167+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
168+
target_link_options(duckdb_java PRIVATE
169+
-fvisibility=hidden
170+
-Wl,-exported_symbols_list,${CMAKE_CURRENT_LIST_DIR}/duckdb_java.exp)
171+
endif()
172+
endif()
158173

159174
string(JOIN "_" LIB_SUFFIX ".so" ${OS_NAME} ${OS_ARCH})
160175
set_target_properties(duckdb_java PROPERTIES SUFFIX ${LIB_SUFFIX})

CMakeLists.txt.in

+16-1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ if(MSVC)
100100
src/duckdb/extension/jemalloc/jemalloc/src/util.c
101101
src/duckdb/extension/jemalloc/jemalloc/src/witness.c
102102
src/duckdb/extension/jemalloc/jemalloc/src/zone.c )
103+
list(APPEND DUCKDB_SRC_FILES duckdb_java.def)
103104
add_definitions(/bigobj /D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR)
104105
else()
105106
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG ")
@@ -152,9 +153,23 @@ add_library(duckdb_java SHARED
152153
src/jni/refs.cpp
153154
src/jni/util.cpp
154155
${DUCKDB_SRC_FILES})
155-
target_compile_options(duckdb_java PRIVATE -fexceptions)
156+
target_compile_definitions(duckdb_java PRIVATE -DDUCKDB_STATIC_BUILD)
156157
target_link_libraries(duckdb_java duckdb-native ${LIBRARY_FILES})
157158
target_link_libraries(duckdb_java ${DUCKDB_SYSTEM_LIBS})
159+
if(NOT WIN32)
160+
target_compile_options(duckdb_java PRIVATE -fexceptions)
161+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
162+
target_link_options(duckdb_java PRIVATE
163+
-Bsymbolic
164+
-Bsymbolic-functions
165+
-fvisibility=hidden
166+
-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/duckdb_java.map)
167+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
168+
target_link_options(duckdb_java PRIVATE
169+
-fvisibility=hidden
170+
-Wl,-exported_symbols_list,${CMAKE_CURRENT_LIST_DIR}/duckdb_java.exp)
171+
endif()
172+
endif()
158173

159174
string(JOIN "_" LIB_SUFFIX ".so" ${OS_NAME} ${OS_ARCH})
160175
set_target_properties(duckdb_java PROPERTIES SUFFIX ${LIB_SUFFIX})

0 commit comments

Comments
 (0)