Cannot compile static despite specifying -DBUILD_SHARED_LIBS=OFF

71 Views Asked by At

I have the following CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(LSODrinkServer VERSION 0.1 LANGUAGES C)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake-modules)
set(HEADERDIR ${PROJECT_SOURCE_DIR}/include)
set(SOURCEDIR ${PROJECT_SOURCE_DIR}/src)     
set(FILES bstnode 
    config
    dbconn
    errorhandling 
    httphelper
    linkedlist
    mimage
    mlog 
    serverinfo 
    strutil 
    threadroutines)
set(SRCFILES ${FILES})
list(INSERT SRCFILES 0 main)
list(TRANSFORM SRCFILES PREPEND ${SOURCEDIR}/)
list(TRANSFORM SRCFILES APPEND .c)
set(HEADERFILES ${FILES})
list(INSERT HEADERFILES 0 config)
list(TRANSFORM HEADERFILES PREPEND ${HEADERDIR}/)
list(TRANSFORM HEADERFILES APPEND .h)
add_executable(server ${SRCFILES} ${HEADERFILES})
target_include_directories(server PRIVATE ${HEADERDIR})
find_package(PostgreSQL REQUIRED)
target_include_directories(server PRIVATE ${PostgreSQL_INCLUDE_DIRS})
target_link_libraries(server PRIVATE ${PostgreSQL_LIBRARIES})
find_package(Jansson REQUIRED)
target_include_directories(server PRIVATE ${JANSSON_INCLUDE_DIRS})
target_link_libraries(server PRIVATE ${JANSSON_LIBRARIES})

I want to compile my executable statically so that I don't have to install dependencies on other machines. Unfortunately, when I do cmake -DBUILD_SHARED_LIBS=OFF . everything goes smoothly, and I can make just fine, but when I run the program on another machine (which has package postgresql installed) I get this error:

./server: /lib/x86_64-linux-gnu/libjansson.so.4: no version information available (required by ./server)

What can I do to fix this? I naively tried setting BUILD_SHARED_LIBS to OFF in the CMakeList just to make sure this was not some random bug, but that didn't work out.

0

There are 0 best solutions below