Verknüpft cmake meine ausführbare Datei statisch mit meiner gemeinsam genutzten Bibliothek?C++

Programme in C++. Entwicklerforum
Guest
 Verknüpft cmake meine ausführbare Datei statisch mit meiner gemeinsam genutzten Bibliothek?

Post by Guest »

Ich habe ein paar gemeinsam genutzte Bibliotheken, die miteinander verlinkt sind, dann eine ausführbare Datei, die nur mit einer als Einstiegspunkt verknüpft ist. Ich erhalte zur Laufzeit keine Symbole für irgendetwas in dieser Art, ich übergebe SHARED einfach an add_library() .
Aber ich habe den Verdacht, dass meine Bibliotheksbinärdatei einfach über jede andere enthaltene Bibliothek und jede ausführbare Datei kopiert wird. Dies liegt daran, dass die Größen von allem seltsamerweise übereinstimmen, meine ausführbare Datei ist es 8,7 MB und der Code besteht eigentlich nur aus ein paar Zeilen, meine Kernbibliothek ist 8 MB groß.
Ich habe den Abhängigkeitswalker verwendet, um zu überprüfen, ob meine ausführbare Datei nicht mit der Kernbibliotheks-DLL verknüpft ist, d. h Ich habe beide Binärdateien in einem Hex-Editor überprüft und alle Zeichenfolgen aus der kompilierten Quelle der Kernbibliothek wurden in der Binärdatei für die ausführbare Datei angezeigt.
Hier sind meine CMakeLists für die Kernbibliothek:

Code: Select all

add_library(${MR_CORE} SHARED)
target_sources(
${MR_CORE}
PUBLIC
(source files go here)
)
target_link_libraries(${MR_CORE} ${MR_SCRIPT} SDL3::SDL3)
target_compile_definitions(
${MR_CORE}
PUBLIC
MR_BUILDINFO_GAME_NAME="${MR_GAME_NAME}"
)
if(MROPT_DEV)
target_compile_definitions(${MR_CORE} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_CORE} PUBLIC MR_BUILDOPT_DEV=0)
endif()
und hier sind meine CMakeLists für die ausführbare Datei:
(Ich kompiliere tatsächlich eine Laufzeitbibliothek, die den eigentlichen Code enthält. Die ausführbare Datei ruft init nur wirklich in der Kernbibliothek auf und teilt dann mit die Laufzeitbibliothek, um ihre Aufgabe zu erledigen)

Code: Select all

add_library(${MR_RUNTIME} SHARED)
target_sources(
${MR_RUNTIME}
PUBLIC
source/runtime.cpp
)
target_link_libraries(${MR_RUNTIME} ${MR_CORE})
if(MROPT_DEV)
target_compile_definitions(${MR_RUNTIME} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_RUNTIME} PUBLIC MR_BUILDOPT_DEV=0)
endif()

if(WIN32)
add_executable(${MR_GAME_NAME} WIN32 source/main.cpp data/app.rc)
elseif(APPLE)
add_executable(${MR_GAME_NAME} MACOSX_BUNDLE source/main.cpp)
else()
add_executable(${MR_GAME_NAME} source/main.cpp)
endif()

target_link_libraries(${MR_GAME_NAME} PUBLIC ${MR_RUNTIME})
if(MROPT_DEV)
target_compile_definitions(${MR_GAME_NAME} PUBLIC MR_BUILDOPT_DEV=1)
else()
target_compile_definitions(${MR_GAME_NAME} PUBLIC MR_BUILDOPT_DEV=0)
endif()

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post