У меня есть несколько общих библиотек, которые связаны друг с другом, а затем исполняемый файл, который ссылается только на одну из них в качестве точки входа. Я не получаю никаких символов во время выполнения чего-либо подобного, я просто передаю 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
Связывает ли cmake мой исполняемый файл с моей общей библиотекой статически? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как статически собрать [apache htpasswd] как статически связанный двоичный файл
Anonymous » » в форуме Linux - 0 Ответы
- 87 Просмотры
-
Последнее сообщение Anonymous
-
-
-
C ++ в основном статически напечатан, в соответствии с таковой вики или статически?
Anonymous » » в форуме C++ - 0 Ответы
- 62 Просмотры
-
Последнее сообщение Anonymous
-