Как найти происхождение явно глючного LNK2005 (символ уже определен)?

Я пытаюсь скомпилировать src-код приложения, в котором библиотеки удалены из файлов.

Я уже загрузил, скомпилировал и связал каждую библиотеку, которая нужна проекту, но у меня возникли проблемы с конкретной: crypto (https://www.cryptopp.com/).

Я получаю LNK2005 (символ уже определен) при попытке компиляции. Точное сообщение об ошибке:

Ошибка LNK2005 public: __cdecl CryptoPP::Rijndael::Enc::Enc(void) (??0Enc@Rijndael@CryptoPP@@QEAA@XZ), уже определенный в cryptlib_5_65-v141-x64.lib(rijndael.obj) IGC.GameServer D:\MU Online\IGCN_S9E2_Emu\source\GameServer\PacketEncrypt.obj 1

Ошибка LNK1169 обнаружен один или несколько многократно определенных символов IGC.GameServer D:\MU Online\IGCN_S9E2_Emu\source\Output\IGC.GameServer\Release\IGC.GameServer.exe 1

Очевидно, компоновщик жалуется, что тип public: __cdecl CryptoPP::Rijndael::Enc::Enc(void) определяется дважды (в rijndael.obj — crypto lib — и в PacketEncrypt.obj — проекте, который я пытаюсь скомпилировать).

Я уже много раз исправлял LNK2005 в прошлом, но на этот раз я просто не могу понять, что происходит.

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

Объявление типа определяется дважды Объявление типа определяется дважды

Проблемное заявление Проблемная декларация

Если я прокомментирую две строки, выбранные во втором отпечатке (и, очевидно, удалю их ссылки в коде), я смогу без проблем скомпилировать проект.

Заранее спасибо.


person andresantacruz    schedule 09.03.2018    source источник
comment
Рекомендуем заменить изображения минимально воспроизводимым примером.   -  person user4581301    schedule 09.03.2018
comment
Не публикуйте изображения. Публикуйте код и сообщения об ошибках в виде текста.   -  person Jesper Juhl    schedule 09.03.2018
comment
Ошибка ясно говорит: вы пытаетесь переопределить конструктор Enc.   -  person Ripi2    schedule 09.03.2018
comment
Извините, что не опубликовал минимальный, полный и проверяемый пример. Я могу дать любой необходимый код, проблема в том, что я просто не знаю, какой код поделиться. Проект очень большой, в нем тонны LOC. Тем не менее, любой намек будет оценен, дает ли проблема какое-либо представление о возможных причинах?   -  person andresantacruz    schedule 10.03.2018


Ответы (1)


Итак, вы связываете cryptlib_5_65 с IGC.GameServer, но в cryptlib уже есть эта функция. Я предполагаю, что rijndael.cpp на самом деле принадлежит проекту cryptlib, но вы также добавили исходный файл в проект GameServer. Проверьте, нет ли этого файла в обоих проектах, и если да, то удалите его с GameServer.
Реализация должна быть только в одном из них.
Возможно, дело не в этом, но отсутствие более подробных сведений от вас, затрудняет поиск решения.

Я бы разместил это как комментарий, но недостаточно баллов с моей стороны.

person Anicka Burova    schedule 09.03.2018
comment
Привет, @Anicka, спасибо за ответ. Это была одна из моих первых мыслей, и тип, определенный дважды, не определен в проекте. Вот почему я так потерян об этом. Я начинаю думать, что это баг. Можете ли вы подумать о другой возможной причине? - person andresantacruz; 10.03.2018
comment
Если вы не опубликуете больше информации, нет. - person Anicka Burova; 10.03.2018
comment
Какую информацию я могу вам дать? - person andresantacruz; 10.03.2018