Могу ли я попросить компоновщик VС++ игнорировать нерешенные внешние?

Я пытаюсь создать очень сложный проект с открытым исходным кодом с VС++. Проект состоит из десятков библиотек и одного исполняемого файла в зависимости от этих библиотек.

По каким-то причинам компоновщик VС++ не хочет видеть около 40 функций, реализованных в одной из этих библиотек, и отчеты "неразрешенная внешняя ссылка" для каждого, поэтому я не могу связать. Я не хочу тратить время на решение этой проблемы - эти функции, вероятно, никогда не называются.

Я хотел бы просто попросить компоновщика связать то, что он видит, и вставить некоторую разумную обработку ошибок (например, сообщение об ошибке и завершение работы программы) вместо отсутствия функций. Как я могу это сделать?

Ответ 1

Вы можете использовать опцию /FORCE:UNRESOLVED linker.

Документация для этого содержит довольно заниженное предупреждение:

Файл, созданный с помощью этой опции, может не работает, как ожидалось.

В pratice не будет обработки ошибок - просто сбой.

Ответ 2

Если функции действительно никогда не вызываются, создайте для библиотек актуальные библиотеки (.lib файлы). Тогда компоновщик будет извлекать из библиотек только то, что нужно.

Задача компоновщика состоит в том, чтобы разрешить все ссылки, поэтому я не думаю, что вы захотите вставить код обработки ошибок.

P.S. Первое, что я хотел бы проверить, - проверить, скомпилированы ли функции C как С++, что приводит к отсутствию символов.

Ответ 3

Если они никогда не вызываются, удалите ссылки из вашего проекта. Если они вызваны, то исправьте эту проклятую проблему. Здесь нет другого другого варианта.

Ответ 4

Есть некоторые заметные исключения, но большинство проектов OpenSource не предназначены для создания под VisualStudio.

Как правило, для порта Windows вам лучше использовать cygwin или mingw. Мой совет, как правило, для mingw, если программа не использует много вызовов Unix OSey, таких как каналы и сигналы.