Skip to content

Commit 9e574fd

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: duckdb#102
1 parent a179e86 commit 9e574fd

File tree

5 files changed

+1393
-2
lines changed

5 files changed

+1393
-2
lines changed

CMakeLists.txt

Lines changed: 16 additions & 1 deletion
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 ")
@@ -146,9 +147,23 @@ if(MSVC)
146147
endif()
147148

148149
add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES})
149-
target_compile_options(duckdb_java PRIVATE -fexceptions)
150+
target_compile_definitions(duckdb_java PRIVATE -DDUCKDB_STATIC_BUILD)
150151
target_link_libraries(duckdb_java duckdb-native )
151152
target_link_libraries(duckdb_java ${DUCKDB_SYSTEM_LIBS})
153+
if(NOT WIN32)
154+
target_compile_options(duckdb_java PRIVATE -fexceptions)
155+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
156+
target_link_options(duckdb_java PRIVATE
157+
-Bsymbolic
158+
-Bsymbolic-functions
159+
-fvisibility=hidden
160+
-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/duckdb_java.map)
161+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
162+
target_link_options(duckdb_java PRIVATE
163+
-fvisibility=hidden
164+
-Wl,-exported_symbols_list,${CMAKE_CURRENT_LIST_DIR}/duckdb_java.exp)
165+
endif()
166+
endif()
152167

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

CMakeLists.txt.in

Lines changed: 16 additions & 1 deletion
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 ")
@@ -146,9 +147,23 @@ if(MSVC)
146147
endif()
147148

148149
add_library(duckdb_java SHARED src/jni/duckdb_java.cpp src/jni/functions.cpp ${DUCKDB_SRC_FILES})
149-
target_compile_options(duckdb_java PRIVATE -fexceptions)
150+
target_compile_definitions(duckdb_java PRIVATE -DDUCKDB_STATIC_BUILD)
150151
target_link_libraries(duckdb_java duckdb-native ${LIBRARY_FILES})
151152
target_link_libraries(duckdb_java ${DUCKDB_SYSTEM_LIBS})
153+
if(NOT WIN32)
154+
target_compile_options(duckdb_java PRIVATE -fexceptions)
155+
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
156+
target_link_options(duckdb_java PRIVATE
157+
-Bsymbolic
158+
-Bsymbolic-functions
159+
-fvisibility=hidden
160+
-Wl,--version-script=${CMAKE_CURRENT_LIST_DIR}/duckdb_java.map)
161+
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
162+
target_link_options(duckdb_java PRIVATE
163+
-fvisibility=hidden
164+
-Wl,-exported_symbols_list,${CMAKE_CURRENT_LIST_DIR}/duckdb_java.exp)
165+
endif()
166+
endif()
152167

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

0 commit comments

Comments
 (0)