diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3890c1248d2c4c591f8cda7f4bcc69e1d9a3b93d..b3fd25f29dee43c5adf74a8bb744c4c82f841a80 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,6 +43,10 @@ option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
 
 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
 
+###########################################
+### Special treatment for "Windows",
+### a proprietary OS by "MicroSoft".
+###########################################
 IF (WIN32)
     cmake_minimum_required(VERSION 3.15)
     cmake_policy(SET CMP0091 NEW)
@@ -190,11 +194,25 @@ target_include_directories(caosdb PUBLIC
     $<INSTALL_INTERFACE:include>
 )
 
-add_library(ccaosdb src/ccaosdb.cpp)
-target_link_libraries(ccaosdb
-    ${LIBCAOSDB}
-    ${CONAN_LIBS}
-)
+add_library(ccaosdb SHARED src/ccaosdb.cpp)
+IF (WIN32)
+    set_target_properties(caosdb PROPERTIES
+        LINK_FLAGS "/WHOLEARCHIVE"
+    )
+    target_link_libraries(ccaosdb
+        ${LIBCAOSDB}
+        ${CONAN_LIBS}
+    )
+ELSE()
+    set_target_properties(caosdb PROPERTIES
+        COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+    target_link_libraries(ccaosdb
+        "-Wl,--whole-archive"
+        ${LIBCAOSDB}
+        "-Wl,--no-whole-archive"
+        ${CONAN_LIBS}
+    )
+ENDIF()
 
 add_executable(ccaosdbcli EXCLUDE_FROM_ALL src/ccaosdbcli.c)
 target_include_directories(ccaosdbcli SYSTEM PUBLIC