2012-01-07 5 views
0

У меня есть несколько вопросов, о смешивании кода:смешивания С и С ++

  1. полный проект, основанном на C, если я хочу использовать C++ библиотеки, то я создаю обертку вокруг него с чистым кодом С , затем создайте эту общую библиотеку, мне нужно перейти на g ++ вместо gcc-компилятора?

  2. Что делать, если обертка компилируется как статическая библиотека с библиотекой?

+3

A C оберткой C++? Какой приятный поворот. –

+3

@LightnessRacesinOrbit: Это может происходить часто. Вы можете написать библиотеку на C++, но хотите, чтобы ее можно было использовать программой C. –

+0

Хорошее чтение: [Смешивание C и C++] (http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html) –

ответ

6

Мне интересно узнать, какую библиотеку вы используете, которая имеет только версию на C++, а не чистый C-интерфейс.

Независимо от того, что вы собираетесь называть код C++, ваша оболочка будет считаться C++ и должна быть скомпилирована с помощью g ++. Это связано с name-mangling, и вы должны будете иметь возможность вызывать те функции, которые предоставляет библиотека C++. Вы можете посмотреть на них с readelf -s.

Однако функции, которые предоставляет ваша оболочка, должны быть отмечены extern "C", чтобы их имена не искалечились. Тогда вы сможете назвать их из своего чистого приложения C.

Статическая и общая библиотека не имеет никакого значения здесь. Это просто вопрос создания правильных символов, чтобы связь могла произойти.

Смежные вопросы