У меня есть два lib-файла, основанных на C ++, один от компании, а другой откомпилированный мной с использованием исходного кода, предоставленного компанией. Я использую Windows 7 x64 и компилирую библиотеку, используя makefile.
Когда я пытаюсь связать программу, используя библиотеку, которую я скомпилировал, она выдает ошибку (LNK 2019: неразрешенный внешний символ), сообщающую, что она не может найти функцию в библиотеке.
Проблема, которую я обнаружил, состоит в том, что имя функции, которую ищет компоновщик, имеет @ -суффикс, но у скомпилированной библиотеки нет этого суффикса. Если я использую библиотеку, предоставленную компанией, она имеет @ -суффикс и работает нормально. Поэтому я хотел бы знать, что означает этот @ -suffix и как скомпилировать библиотеку, чтобы она имела этот суффикс.
Спасибо за чтение, и любая помощь будет принята с благодарностью.
пс. Ниже приведены начальные части вывода дампа, где верхний — из библиотеки компании, а нижний — тот, который я выполнил:
Библиотека от компании
Microsoft (R) COFF/PE Dumper Version 12.00.30723.0
Copyright (C) Microsoft Corporation. All rights reserved.Dump of file motor.lib
File Type: LIBRARY
Archive member name at 8: /
5602DBD6 time/date Wed Sep 23 18:05:26 2015
uid
gid
0 mode
29F93 size
correct header end
5179 public symbols
51FA4 _S826_WriteReg@12
51FA4 __imp__S826_WriteReg@12
52010 _S826_WriteBridge@24
52010 __imp__S826_WriteBridge@24
5207E _S826_WatchdogWaitCancel@4
5207E __imp__S826_WatchdogWaitCancel@4
Библиотека, которую я собрал
Microsoft (R) COFF/PE Dumper Version 12.00.30723.0
Copyright (C) Microsoft Corporation. All rights reserved.Dump of file motor.lib
File Type: LIBRARY
Archive member name at 8: /
56796705 time/date Tue Dec 22 15:06:45 2015
uid
gid
0 mode
2A45B size
correct header end
5252 public symbols
52368 S826_WriteReg
52368 __imp_S826_WriteReg
523D0 S826_WriteBridge
523D0 __imp_S826_WriteBridge
5243A S826_WatchdogWaitCancel
5243A __imp_S826_WatchdogWaitCancel
Задача ещё не решена.
Других решений пока нет …