2016-10-16 8 views
0

Вкратце: на Visual C++ 2015 я получаю ошибку компоновщика, жалуясь на отсутствие символов, присутствующих в файле .lib, с которым я ссылаюсь.Visual C++ компоновщик жалуется на отсутствие символа, который не отсутствует


При продолжительном: При составлении-и-душе какой-то программы из командной строки с cl.exe я получаю следующее, как первые из многих ошибок:

main.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxApp::sm_eventTable" ([email protected]@@[email protected]@B) 

AFAIK, это длинная линия говорит что my main.obj относится к функции, к которой привязан символ sm_eventTable @ wxApp @@ 1UwxEventTable @@ B, но что компоновщик не смог найти этот символ в (длинном) списке библиотек, которые я предоставил в командной строке ,

Я скомпилирую в/MD режиме. Не знаю, помогает ли это, болит или не имеет значения здесь.

Один из файлов связать с wxmsw31u_core.lib это и делает

DUMPBIN/заголовки wxmsw31u_core.lib> here.txt

дает длинный файл containting следующий

Version  : 0 
    Machine  : 8664 (x64) 
    TimeDateStamp: 56D46194 Mon Feb 29 16:19:48 2016 
    SizeOfData : 00000045 
    DLL name  : wxmsw310u_core_vc140_x64.dll 
    Symbol name : [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable) 
    Type   : data 
    Name type : name 
    Hint   : 14083 
    Name   : [email protected]@@[email protected]@B 

От это я заключил, что wxmsw31u_core.lib это «библиотека импорта»: другими словами, это означает, что эта библиотека не содержит код, а просто ссылается на файл dll wxmsw310u_core_vc140_x64.dll, который фактически содержит код. ?

Последний wxmsw310u_core_vc140_x64.dll файл действительно упоминает sm_eventTable @ wxApp @@ 1UwxEventTable @@ B, как я проверил:

DUMPBIN/ЭКСПОРТ wxmsw310u_core_vc140_x64.dll> here2.txt

дал

14084 3703 0057F008 [email protected]@@[email protected]@B = [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable) 

Отмечу, что первое число равно подсказке предыдущего заголовка плюс один. Полагаю, это нормально?

Я нашел время, чтобы проверить DLL, как указано выше, но AFAIK, DLL не требуется в процессе компоновки (требуется, когда вы вызываете .exe, который производится).

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


Редактировать

я частично решить эту проблему путем составления себе в libary вместо того, чтобы использовать скомпилированные binaires для Windows, предоставляемые WxWidgets: теперь я могу скомпилировать свою программу, и все хорошо.

Ну, не все: первоначальный вопрос остается. У меня была ситуация, когда я пытался связать obj с lib, чтобы получить exe, obj ссылается на символ, чье искаженное имя присутствует в lib, компоновщик загружает obj и lib (подтвержденное использование/VERBOSE), однако компоновщик отказывается считать символ «разрешенным». Зачем?

Я создам новый вопрос, где я попрошу объяснения об условиях, которые необходимо решить.

ответ

0

AFAIK, эта длинная строка говорит, что мой main.obj относится к функции, которой символ?

Да, linker не может найти [email protected]@@[email protected]@B на указанном Вами пути.

Убедитесь, что у вас есть правильно параметр настройки Additional Library Path и что целевой платформы вашего приложения /Machine:X64

+0

Спасибо за ваш ответ. У моей командной строки действительно есть/MACHINE: X64 и/LIBPATH: «the-path-to-the-lib» (во всяком случае без lib компоновщик останавливается на более раннем этапе). – Arnaud

+0

@Arnaud '/ LIBPATH' должен быть путь к каталогу, а не самому файлу библиотеки – Nikita

+0

Да, это правильный путь – Arnaud

 Смежные вопросы

  • Нет связанных вопросов^_^