Строго нет, конечно, потому что наборы инструментов не одинаковы.
Но люди делают это. Сложности в том, что в окнах нужно
специально пометьте объявления функций, из которых вы хотите экспортировать
DLL с __declspec(dllexport)
в месте в библиотеке, где
функция определена и __declspec(dllimport)
в местах
в коде клиента, где функция ссылается . Потому что стандарт
Практика C имеет только одно объявление в одном заголовочном файле, это
означает, что вам, как правило, нужно выполнить некоторую макроработу, чтобы
Префикс, который работает в обоих местах. Кажется, что каждый проект
выбирает свой собственный стандарт для этого.
На стороне Unix вам вообще не нужно тегировать экспорт, что приятно.
Это связано с тем, что каждая нестатическая функция экспортируется по умолчанию,
что не так приятно. Часто вы можете сойти с рук до тех пор, пока
Ваши непубличные / нестатические символы имеют вменяемые префиксы, вот что
большинство проектов, кажется, делают. Если вам нужен более точный контроль над
экспортированные символы, вы можете использовать "mapfile" в стиле Solaris с GNU
Аргумент компоновщика --version-script (-M под Solaris), чтобы явно указать, какие символы должны появляться
во внешнем пространстве имен.
Есть еще несколько ошибок между платформами, например, как
глобальное пространство имен для каждой библиотеки работает и обрабатывает
код запуска / выключения. По сути, это крысиное гнездо, которое не может быть
разумно объяснил в этом коротком посте, но пока вы осторожны
что ваша библиотека содержит простые функции, а ваше пространство имен - нет
загрязнять, у вас не должно быть особых проблем. Посмотрите на некоторые из более
популярные кросс-платформенные разделяемые библиотеки (например, Qt, Glib / Gtk +, что угодно
распространяется с помощью msys и т. д.) для руководства.