ошибка LNK2005 с сгенерированными именами символов - PullRequest
0 голосов
/ 22 декабря 2018

1> expression.obj: ошибка LNK2005: «?? @ 10f67d10f2509d1b7ae3d4b0285ba9c5 @» (?? @ 10f67d10f2509d1b7ae3d4b0285ba9c5 @) уже определена в defineSwitchBranches.obj 1> bb2: 89b0: 688? @ 7d18b7ced3468f6b7bb84d399883984b @) уже определено в defineSwitchBranches.obj 1> expression.obj: ошибка LNK2005: «?? @ 84d623799b2629b9bf1736313b3256f5 @» (?? @ 84d623799b2629b3b56b0320b0b0325b0325b0325b0325325325325b5b5325325b5325b5325-bb)????C: \ Users \ pfoelsch \ Documents \ SYMPHONY \ symphony \ src \ veriloga \ modelcompiler \ src \ x64 \ Debug \ smc.exe: фатальная ошибка LNK1169: найден один или несколько многократно определенных символов 1> Готовый проект сборки "smc.vcxproj"- FAILED.

Когда я объединяю два испорченных файла .cpp в один, компоновщик жалуется на два других файла .obj ....

проект прекрасно работает с использованием g ++5,5 и 7,3

1 Ответ

0 голосов
/ 26 декабря 2018

Я решил эту проблему, также создавая файлы .asm с аннотацией исходного кода, а затем посмотрев, какая строка в источнике соответствует именам символов, которые нарушают работу (project_properties / C ++ / output_files / assemblyr_output = assembly_with_source_code).Был некоторый шаблонный класс с виртуальным методом в некотором файле .h:

template<typename>
class A
{
    virtual void b(void) const;
};
template<typename>
void A::b(void)
{
}

и один файл .cpp !!!содержал специализацию b:

template<>
void A<something>::b(void)
{
}

Добавление заголовка для этого в файл .h решило проблему!(Опять же: исходный код нарушил сборку с различными версиями g ++):

template<>
void A<something>::b(void);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...