Нет, __declspec является специфическим для VC++.
Одна из причин, по которым требуется VC++, по умолчанию DLL не выставляют символы за пределами DLL, если явно не просят сделать это. В Posix общие объекты выставляют все свои (нестатические) символы, если явно не указано, чтобы скрыть их.
Update
Основываясь на ваш комментарий, который вы хотите, чтобы ваш код был переносим, вы хотите использовать препроцессор и сделать что-то вроде этого:
#ifdef WIN32
#ifdef EXPORT_CLASS_FOO
#define CLASS_FOO __declspec(dllexport)
#else
#define CLASS_FOO __declspec(dllimport)
#endif
#else
#define CLASS_FOO
#endif
class CLASS_FOO foo
{ ... };
В проекте реализации класса, обязательно добавьте EXPORT_CLASS_FOO в качестве определения препроцессора (найдено в Project | NAME Properties .. в C/C++ | Preprocessor | Определения предварительной обработки). Таким образом, вы будете экспортировать их при создании DLL, импортировать их, когда используете DLL, и не делаете ничего особенного в Unix.
Идея вопроса состоит в том, чтобы иметь возможность компилировать код в разных системах (win, linux, * bsd), но разрабатывать на окнах (мне нравится визуальная студия и инструменты, которые она предоставляет (еще больше в следующей версии со всеми доступный параллельный инструмент !!)) и быстро скомпилировать его с окнами с mingw и msvc, чтобы проверить, что код «выглядит» нормально. Это сделает порт для Linux быстрее и проще – user246456