32-разрядный - 64-разрядный: ошибка LNK2019, как получить соответствующую информацию - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над 32-разрядным приложением C ++, которое я преобразовываю в 64-разрядное приложение (просто выберите другую конфигурацию, скопируйте и адаптируйте все соответствующие параметры и попытайтесь создать ее), а сейчасЯ застрял при ошибке компоновщика LNK2019 "unresolved external symbol ... referenced in function ..." и хотел бы получить больше информации:
Я уже пересобрал приложение в 32-разрядной версии и нашел упомянутую функцию, но когда я нажимаю F12, Shift + F12 или Ctrl + F12 Я не вижу, откуда взята реализация.

Я думаю, что реализация функции находится где-то внутри DLL, но я хочу быть в этом уверен (как только это произойдетподтвердив, я могу найти соответствующие настройки, определить местоположение и скопировать этот параметр для моей 64-разрядной конфигурации.

Может быть, вопрос можно переформулировать следующим образом: в случае, если функция извлекается изDLL, можно ли узнать, в какой DLL эта функция реализована?

1 Ответ

0 голосов
/ 31 мая 2018

Ганс, совет по поводу файла * .map был спасением жизни: это позволило мне узнать, в каком файле должна быть найдена упомянутая функция.
Очевидно, что это еще не конец: упомянутый файлбыла DLL, в то время как нет ссылки на саму DLL, но на файл LIB, который перенаправляет на DLL.
В случае, если это не достаточно сложно: сама функция была функцией __imp_, и, кажется,чтобы быть здесь подвохом:

  • 32-бит: __imp__ функции (смотреть оба подчеркивания после imp)
  • 64-бит: __imp_ функции (смотреть одиночныйподчеркивание после imp)

Наконец, я решил проблему, проверив выходные данные сборки (сравните записи LIB= и PATH= и убедитесь, что они одинаковы для обоих случаев: при наличии ссылкина 32-битные библиотеки в одном выводе должна быть ссылка на 64-битные библиотеки в другом выходе).
В 32-битном выводе я увидел, что компоновщик ссылается на библиотеку, которую онНе делай в случае 64-битной компоновки: я добавил соответствующую библиотеку в конфигурацию проекта (свойства конфигурации, компоновщик, ввод, дополнительные зависимости), и это окончательно решило проблему.

...