Нерешенные ошибки внешних символов при переключении из библиотеки сборки в exe или dll

StackOverflow https://stackoverflow.com/questions/168232

  •  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?) в разделе «Дополнительные пути к библиотекам». Возможно, вам потребуется добавить его местоположение в разделе «Дополнительные пути к библиотекам».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top