LINUX.ORG.RU

Привязки С к либе на C++


0

0

ЛОР, подскажи быдлокодеришке.

Я хочу написать либу на С++ (негуевую), которая, возможно, будет использоваться в программе на чистом C. Кроссплатформенность не нужна (только никс). Какие у меня будут проблемы с привязками и где можно про все это RTFM?

google://C bindings for C++ library и проч. в этом духе не помогают никак.

anonymous

>Кроссплатформенность не нужна (только никс)

+1. Только *nix == всё окроме Венды

>будет использоваться в программе на чистом C

Пиши обертку:

int make_me_happy(Human *me, int happiness) { me->make_happy(happiness); }

Ну или погугли генераторы вроде SWIG'а

xTERM ★★
()
Ответ на: комментарий от xTERM

Пасиб, SWIG посмотрю. Хотя у меня объем внешнего интерфейса такой, что сильно об автоматизации можно особо не заморачиваться.

Меня беспокоят мифические pitfall'ы самого подхода, если таковые существуют.

anonymous
()
Ответ на: комментарий от mint

>а VxWorks разве не *nix?

нет. она и POSIX'у соответствует, прямо скажем, не намного лучше оффтопика

jtootf ★★★★★
()

сделай extern "C" для всех функций/переменных, к которым хочешь обеспечить доступ из С-программы, все остальное пиши как тебе нравится

frame ★★★
()
Ответ на: комментарий от anonymous

>>At one time, most C++ compilers required that function main be compiled by the C++ compiler. That requirement is not common today, and Sun C++ does not require it.

>Интересно, как с этим дела у gcc и других компиляторов обстоят.

Судя по моему опыту юзания плюсов без LIBC перед входом в main() нужно вызвать конструкторы статических объектов и зарегистрировать их деструкторы через atexit(). Если вместо глобальных статических объектов используются глобальные статические указатели на объекты лежащие в куче то все выходит пучком.

PS: А, еще для работы с экзепшенами нужен какой-то плюсатый стартап-код в прологе main()

Absurd ★★★
()

лучше на чмстом си напиши

dimon555 ★★★★★
()

Проблемы будут в искажении имен функций (лечится, как тут упомянуто, обкладками extern "C" в заголовках для "делегатов"), с инициализаторами статических классов (никак не лечится), "левыми" зависимостями от плюсатых библиотек и зависимостью от компилятора. В декларированной постановке ("только никс") -- не реально. Если можно обойтись конкретной версией gcc -- в общем, без проблем, не взирая на платформу.

Die-Hard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.