Как запретить компоновщику MSVC исключать файлы obj, объекты которых не используются? ⇐ C++
-
Anonymous
Как запретить компоновщику MSVC исключать файлы obj, объекты которых не используются?
Я работаю над большим проектом cpp со множеством подмодулей и внешних зависимостей.
Критический сценарий следующий:
У меня есть подмодуль под названием «MILPSolver» со множеством разных решателей, по одному для каждого класса. Затем у меня есть подмодуль под названием "UCBlock" с определением задач, которые будут решаться одним из "MILPSolver" в модуле.
У меня также есть «тестовый» подмодуль с файлом «test.cpp» и таким файлом CMake:
# ----- Тест ------------------------------------- --------------------------- # if (TARGET SMS++::UCBlock И ЦЕЛЕВЫЕ SMS++::MILPsolver) add_executable(TUDPS_test test.cpp) target_link_libraries (TUDPS_test PRIVATE SMS++::MILPsolver SMS++::UCBlock) add_test(ИМЯ TUDPS_test КОМАНДА TUDPS_test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) конециф () Основной файл «test.cpp» считывает конкретное имя MILPSolver из txt-файла конфигурации, например «CPXMILPSolver», и инициализирует одноименный объект, который будет прикреплен к экземпляру проблемы UCBlock, который будет использоваться для решить это.
Но, похоже, существует проблема компоновщика MSVC, которая исключает конкретный CPXMILPSolver из test.exe, поскольку он явно не включен и не вызывается в основной функции (никакой конкретный объект типа CPXMILPSolver не был создан).
Я не вставляю весь код, так как уверен, что это не логическая проблема, а проблема компилятора компоновщика. Под Linux все прошло хорошо. С MSVC это не удается.
На самом деле, проблема решается, если я создаю «фальшивый и пустой» экземпляр класса «CPXMILPSolver», поэтому компоновщик включает его в окончательный исполняемый файл.
Но я ищу решение, которое не включает необходимость создания «пустых» и «поддельных» экземпляров для каждого конкретного решателя milp, содержащегося в подмодуле «MILPSolver».
Есть идеи, как решить эту проблему?
Спасибо.
Я работаю над большим проектом cpp со множеством подмодулей и внешних зависимостей.
Критический сценарий следующий:
У меня есть подмодуль под названием «MILPSolver» со множеством разных решателей, по одному для каждого класса. Затем у меня есть подмодуль под названием "UCBlock" с определением задач, которые будут решаться одним из "MILPSolver" в модуле.
У меня также есть «тестовый» подмодуль с файлом «test.cpp» и таким файлом CMake:
# ----- Тест ------------------------------------- --------------------------- # if (TARGET SMS++::UCBlock И ЦЕЛЕВЫЕ SMS++::MILPsolver) add_executable(TUDPS_test test.cpp) target_link_libraries (TUDPS_test PRIVATE SMS++::MILPsolver SMS++::UCBlock) add_test(ИМЯ TUDPS_test КОМАНДА TUDPS_test WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) конециф () Основной файл «test.cpp» считывает конкретное имя MILPSolver из txt-файла конфигурации, например «CPXMILPSolver», и инициализирует одноименный объект, который будет прикреплен к экземпляру проблемы UCBlock, который будет использоваться для решить это.
Но, похоже, существует проблема компоновщика MSVC, которая исключает конкретный CPXMILPSolver из test.exe, поскольку он явно не включен и не вызывается в основной функции (никакой конкретный объект типа CPXMILPSolver не был создан).
Я не вставляю весь код, так как уверен, что это не логическая проблема, а проблема компилятора компоновщика. Под Linux все прошло хорошо. С MSVC это не удается.
На самом деле, проблема решается, если я создаю «фальшивый и пустой» экземпляр класса «CPXMILPSolver», поэтому компоновщик включает его в окончательный исполняемый файл.
Но я ищу решение, которое не включает необходимость создания «пустых» и «поддельных» экземпляров для каждого конкретного решателя milp, содержащегося в подмодуле «MILPSolver».
Есть идеи, как решить эту проблему?
Спасибо.
Мобильная версия