Нерешенные ошибки внешних символов при переключении из библиотеки сборки в exe или dll - PullRequest
1 голос
/ 03 октября 2008

Я создаю приложение как библиотеку, но чтобы убедиться, что могу получить желаемый вывод, я переключил его для создания 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)» (__Imp_? Инициализировать @ XMLPlatformUtils @ xercesc_2_8 @@ SAXQBD0QAVPanicHandler @ 2 @ QAVMemoryManager @ 2 @ _N @ Z) упоминается в функции "void __cdecl" XSD :: CXX :: XML :: Initialize (аннулируются)» (? Инициализировать @ XML @ CXX @ XSD @@ YAXXZ)

Причина, по которой я спрашиваю об этом здесь, заключается в том, что в Visual Studio, когда я создавал ее как библиотеку, я не получал эти ошибки, но как dll и exe я получаю.

У кого-нибудь есть мысли?

Ответы [ 3 ]

2 голосов
/ 03 октября 2008

При создании библиотеки компоновщику не нужно разрешать импортированные символы. Это происходит только тогда, когда начинается связывание объектных файлов и библиотек.

Вот почему вы только начали видеть ошибку при сборке исполняемого файла.

Действительно, в VC2008 (и 2005, если я хорошо помню), используйте свойства проекта -> Линкер -> Ввод -> Дополнительные зависимости. Библиотеки, которые вам нужны, должны быть разделены пробелами (странно, эй?)

Удачи!

2 голосов
/ 03 октября 2008

Вам также нужно указать, что вы хотите связать эту библиотеку в частности. Пути ссылок просто указывают компоновщику, где находятся данные, которые вам нужно найти, а не то, что нужно искать. Вам также нужно будет указать, что вы ссылаетесь на данную библиотеку (xerces?).

К сожалению, я не знаю, как указать это в MSVC, но это, вероятно, где-то под «Параметры компоновщика».

0 голосов
/ 03 октября 2008

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

Перейдите к параметрам проекта, «Параметры компоновщика», «Ввод» и перечислите библиотеку, которая определяет отсутствующую функцию (xerces.lib?) В разделе «Дополнительные пути к библиотекам». Возможно, вам потребуется добавить его местоположение в разделе «Дополнительные пути к библиотекам».

...