C ++: внешние функции C внутри пространства имен - PullRequest
16 голосов
/ 13 марта 2012

Мне нужно связать две библиотеки, скажем, A и B. Некоторые файлы являются общими в обеих библиотеках. Итак, я объявляю функции в библиотеке A внутри пространства имен, скажем, abc. Итак, в A и B функция func выглядит следующим образом:

[ in A]

    namespace abc {
    extern "C" void func();
    }


[in B]

    extern "C" void func();

При сборке проекта компилятор выдает ошибки связывания, говоря несколько определений функции func. Не является ли функция func в A внутри пространства имен или есть какая-то проблема с внешними функциями "C". Если есть, то как я могу отличить их обоих?

1 Ответ

25 голосов
/ 13 марта 2012

Когда вы используете Extern "C", вы отключаете искажение имен, поэтому вы теряете информацию о пространстве имен, поскольку C не имеет такой концепции.Это вызывает дублирование определения.

...