crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Экспорт классов в gcc (MinGW)
soMan
  опции профиля:
сообщение 4.3.2012, 14:24
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 30.8.2011
Пользователь №: 2839

Спасибо сказали: 0 раз(а)




Репутация:   0  


Требуется написать библиотеку, но ни разу этого не делал. В частности никогда не экспортировал классы. Подскажите, пожалуйста, как в gcc с экспортом целых классов?
Достаточно ли будет нижеследующего кода для экспорта или такое не прокатит?
#define DLLEX __declspec(dllexport)

class DLLEX MyExportedClass
{
    //here some code
}


И что по поводу тех классов, члены которых содержат экземляры STLовских классов или классов стандартной библиотеки? Нормально ли экспортируется след. код? Читал где-то, что мелкомягкий компиль более-менее с нытьем (warnings) экспортирует, про gcc же ни слова.
#define DLLEX __declspec(dllexport)

class DLLEX MyExportedClass
{
    wstring m_myString;
    vector<int> m_MyVector;
    //here some code
}

Возможно, кто-то сталкивался с этим, буду рад услышать ответы, а так же подводные камни, которые следует знать и учесть.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.3.2012, 22:48
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


в gcc у тебя экспортируются все классы, есть специальные декларации для ограничения видимости:
http://gcc.gnu.org/wiki/Visibility

учти, что совместимости таких библиотек между разными компиляторами нет. т.е., нельзя экспортировать классы из библиотеки, скомпиленной под gcc, и использовать её в вызовах из программы, скомпиленной под msvc, например.

в пределах одного компилятора проблем с STL-объектами вроде не наблюдалось. не экспортируются разве что темплейты - ну, это понятно почему: ибо генерятся на уровне компиляции.

Сообщение отредактировал Iron Bug - 5.3.2012, 23:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
soMan
  опции профиля:
сообщение 6.3.2012, 23:26
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 11
Регистрация: 30.8.2011
Пользователь №: 2839

Спасибо сказали: 0 раз(а)




Репутация:   0  


Iron Bug, благодарю за ответ. Темплейты не юзаю у себя, думаю норм все в библиотеку соберется. Чтобы не создавать снова тему еще хотелось бы спросить все о том же gcc: как можно узнать причину SIGINT? При отладке приложения после отработки всех функций получаю SIGINT (Quit with SIGINT). Отдельный запуск приложения без отладки отрабатывает нормально. В Вики прочитал, что мол прерывание процесса это. Вопрос почему и как за хвост поймать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 7.3.2012, 7:04
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(soMan @ 7.3.2012, 2:26) *
как можно узнать причину SIGINT

обычно это реакция на Ctrl-C, принудительное завершение процесса со стороны юзера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.4.2024, 13:50