Windows — C ++ POSIX OO Кроссплатформенная библиотека для использования на разных языках и компиляторах

Это мой первый вопрос, поэтому я прошу прощения за любые ошибки и постараюсь быть как можно более конкретным.
Нам нужно разработать кроссплатформенную библиотеку C ++ POSIX OO для использования на разных языках и компиляторах. Поскольку нам необходимо иметь возможность использовать эту библиотеку в разных операционных системах, например, Windows, Linux и Android, а также в некоторых встроенных ОС, таких как Integrity, мы решили разработать ее под управлением Cygwin или Mingw. Сама библиотека станет объектно-ориентированным кодом C ++, стандартом POSIX. Как я уже упоминал, нам нужно иметь возможность загружать и использовать эту библиотеку на разных языках. Таким образом, чтобы иметь возможность использовать эту библиотеку из управляемого кода, мы сначала думаем об обёртывании ее неуправляемым кодом MS Visual C ++. Здесь мы столкнемся с широким спектром проблем. Visual C ++ использует другой компилятор, и в результате почти невозможно выполнить задачу по связыванию OO-библиотеки C ++, скомпилированной в Cygwin / Mingw. Основная проблема заключается в искажении имени и сопровождается различными проблемами выравнивания структуры, конфликтом основных исключений и моделями памяти.
Другой вариант — иметь один и тот же код, но скомпилировать его с разными компиляторами, например, Cygwin и MS Visual C ++. Проблема этой опции в том, что компилятор Visual C ++ не поддерживает POSIX.

Итак, кто-нибудь сталкивался с такой же проблемой? Есть идеи, как разработать такую ​​библиотеку или хотя бы повторно использовать код для разных компиляторов?

Спасибо за любую помощь в этом, спасибо.

-2

Решение

Решение состоит в том, чтобы предоставить «сплющенные» обертки C классов C ++ (эта концепция по большей части заимствована у Rudy Velthuis: см. http://rvelthuis.de/articles/articles-cppobjs.html). Чтобы сгладить класс, создайте функцию C для каждой функции-члена класса, а также конструктор и деструктор. Оболочка C для конструктора возвращает указатель на объект этого класса. Оболочки для других функций-членов, включая деструктор, принимают этот указатель в качестве первого аргумента. Эти оболочки C должны иметь объявление extern «C», экспортируемое DLL, и обеспечивать косвенный доступ к объектам C ++ (более подробно здесь: http://www.aaronreeves.com/windows-dlls-part-3). В результате, к внешнему слову такая DLL будет выглядеть как DLL, написанная на C. И DLL, написанные на C, очень хорошо работают с EXE-файлами из различных источников.

0

Другие решения


По вопросам рекламы [email protected]