нерешенная внешняя ошибка символа. в дампбине отображается дополнительный @number, добавленный к символам - PullRequest
0 голосов
/ 09 апреля 2011

Мои знания C очень ограничены.Я пытаюсь обновить библиотеку, используемую в моем проекте.Я заменил старую статическую библиотеку и заголовочный файл обновленными файлами.Когда я пытаюсь построить свой проект, я получаю ошибку «неразрешенный внешний символ».

Я проверил как старые, так и новые файлы lib, используя dumpbin, и обнаружил, что символы в новой библиотеке имеют дополнительный @number(где число является одним из 8, 16, 24, 28, 32, 40, 48, 52, 72 или 80).Может кто-нибудь подскажите, пожалуйста, как действовать?

Обновление

Ошибка как-то остановилась.Но теперь я получаю ошибку

LIBCMT.lib (tidtable.obj): ошибка LNK2005: __encode_pointer уже определен в MSVCRT.lib (MSVCR90.dll)

I попытался добавить /NODEFAULTLIB:LIBCMT.lib к параметрам компилятора для библиотеки.Но все равно я получаю ту же ошибку.

1 Ответ

2 голосов
/ 09 апреля 2011

Символы, к которым добавлены символ @ и номер, являются функциями, использующими соглашение о вызовах stdcall .Может показаться, что вы компилируете новую библиотеку с stdcall по умолчанию вместо cdecl.

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

Адресация Обновление

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

...