Нерешенные ошибки внешних символов при переключении из библиотеки сборки в exe или dll
-
03-07-2019 - |
Вопрос
Я создаю приложение как библиотеку, но чтобы убедиться, что могу получить желаемый вывод, я переключил его для создания exe-файла. Как только я это сделал, я получил несколько ошибок о неразрешенных внешних символах.
Сначала я подумал, что у меня не установлен путь к сторонней библиотеке, на которую я ссылаюсь, поэтому я добавил папку в переменную path и даже добавил ее в мои include, ссылки и исходные файлы, просто чтобы убедиться, что у меня есть все пути.
Я все еще получаю сообщение об ошибке.
ошибка LNK2019: неразрешенная внешняя символ " __declspec (dllimport) public: статическая пустота __cdecl xercesc_2_8 :: XMLPlatformUtils :: Initialize (char const * const, char const * const, класс xercesc_2_8 :: PanicHandler * const, класс xercesc_2_8 :: MemoryManager * Const, BOOL) & Quot; (__Imp_? Инициализировать @ XMLPlatformUtils @ xercesc_2_8 @@ SAXQBD0QAVPanicHandler @ 2 @ QAVMemoryManager @ 2 @ _N @ Z) упоминается в функции "void __cdecl" XSD :: CXX :: XML :: Initialize (пустоты) & Quot; (? Инициализировать @ XML @ CXX @ XSD @@ YAXXZ)
Причина, по которой я спрашиваю об этом, заключается в том, что в Visual Studio, когда я создавал ее как библиотеку, я не получал эти ошибки, а как dll и exe, я получаю.
У кого-нибудь есть мысли?
Решение
При создании библиотеки компоновщику не нужно разрешать импортированные символы. Это происходит только тогда, когда начинается связывание объектных файлов и библиотек.
Вот почему вы только начали видеть ошибку при сборке исполняемого файла.
Действительно, в VC2008 (и 2005, если я хорошо помню), используйте свойства проекта - > Линкер - > Ввод - > Дополнительные зависимости. Библиотеки, которые вам нужны, должны быть разделены пробелами (странно, эй?)
Удачи!
Другие советы
Вам также нужно указать, что вы хотите связать эту библиотеку в частности. Пути ссылок просто указывают компоновщику, где находятся данные, которые вам нужно найти, а не то, что нужно искать. Вам также нужно будет указать, что вы ссылаетесь на данную библиотеку (xerces?).
К сожалению, я не знаю, как это указать в MSVC, но, вероятно, это где-то в разделе «Параметры компоновщика».
Как сказал @coppro, вам нужно указать, что вы хотите связать эту библиотеку. Когда вы создаете EXE или DLL, запускается компоновщик, и ему нужно найти все функции, которые вы используете, но для сборки библиотеки запускается библиотекарь, и он не должен разрешать все ссылки на функции (но когда вы используете эту библиотеку в EXE, вам придется снова).
Перейдите к параметрам проекта, «Параметры компоновщика», «Ввод» и перечислите библиотеку, которая определяет отсутствующую функцию (xerces.lib?) в разделе «Дополнительные пути к библиотекам». Возможно, вам потребуется добавить его местоположение в разделе «Дополнительные пути к библиотекам».