Связывает ли cmake мой исполняемый файл с моей общей библиотекой статически?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Связывает ли cmake мой исполняемый файл с моей общей библиотекой статически?

Сообщение Anonymous »

У меня есть несколько общих библиотек, которые связаны друг с другом, а затем исполняемый файл, который ссылается только на одну из них в качестве точки входа. Я не получаю никаких символов во время выполнения чего-либо подобного, я просто передаю SHARED в add_library() .
Но у меня есть подозрение, что двоичный файл моей библиотеки просто копируется поверх каждой включенной библиотеки и каждого исполняемого файла, это возникает из-за того, что размеры всего странным образом совпадают, мой исполняемый файл 8,7 МБ, а его код на самом деле состоит всего из нескольких строк, моя основная библиотека - 8 МБ.
Я использовал средство обхода зависимостей, чтобы проверить, и мой исполняемый файл не связан с dll основной библиотеки, я проверил оба двоичных файла в шестнадцатеричном редакторе, и строки из скомпилированного исходного кода основной библиотеки появились в двоичном файле исполняемого файла.
вот мои CMakeLists для ядра библиотека:
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()

и вот мои CMakeLists для исполняемого файла:
(на самом деле я компилирую библиотеку времени выполнения, в которой есть реальный код, исполняемый файл действительно вызывает только init в основной библиотеке, а затем сообщает библиотека времени выполнения, чтобы сделать это)
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()


Подробнее здесь: https://stackoverflow.com/questions/793 ... statically
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»