У меня есть несколько общих библиотек, которые связаны друг с другом, а затем исполняемый файл, который ссылается только на одну из них в качестве точки входа. Я не получаю никаких символов во время выполнения чего-либо подобного, я просто передаю 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++
Программы на C++. Форум разработчиков
1736646271
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79349210/is-cmake-linking-my-executable-to-my-shared-library-statically[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия