Я знаю, что эта тема, вероятно, мертва, но она все еще очень жива в поисковых системах, поэтому я подумал, что опубликую более подробную информацию.C ++ искажает имена подпрограмм (добавляет набор символов), когда они компилируются.У меня нет знаний, чтобы сказать вам, почему это так.Я предполагаю, что подпрограммы будут однозначно идентифицированы среди всех пространств имен и классов в программе.Несмотря на это, C не искажает имена.Если вы попытаетесь включить файл заголовка C в ваш проект, то все будет отлично работать во время компиляции, но при ссылке на C ++ будет искажать имена подпрограмм в файле заголовка C и пытаться найти их в объектном файле для подпрограмм C.Он не сможет найти их, потому что ожидает, что они будут искажены.
Это наиболее распространено, когда вы пытаетесь использовать существующую библиотеку Си.В этом случае вы не можете перекомпилировать код C как C ++ для восстановления искажения имени.Поэтому вы должны указать компилятору C ++ искать подпрограммы в стиле C, используя 'extern "C".Поместить его в заголовочный файл не обязательно, но когда компилятор C ++ находит объявление подпрограммы C, он будет нуждаться в этом.Размещение заголовочного файла не должно повторяться.
Это также может происходить в некоторых IDE.Но в основном это приводит к тому, что библиотека C связывается с программой / библиотекой C ++.Если gcc использовался для его компиляции, g ++ будет трудно разобраться.