crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> gcc опции компилятора и нестыковка либ
soMan
  опции профиля:
сообщение 7.2.2012, 1:54
Сообщение #1


Студент
*

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

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




Репутация:   0  


После сборки новой версии libCURL стал нарываться на Segmentation Fault в функции curl_easy_cleanup(). Полазив по формумам, пришел к выводу, что происходит некий memory mixup - "смешивание" данных или что-то в этом роде. Ее смысл в том, что и программа сама, и библиотеки, которые она использует должны быть собраны с идентичными опциями компилятора. В студии эти опции задаются ключами /MD /MT /MTd /MDd. Как избежать такой ситуации с gcc и какие ключи компилятора аналогичны MSовским вышеперечисленным?

  • gcc 4.6.2 (MinGW)
  • Eclipse 3.7.1
  • Win 7 Pro x86
  • libCURL 7.24.0
  • OpenSSL 1.0.0g
  • zlib 1.2.6
  • linSSH2 1.4.0
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 7.2.2012, 8:16
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


Вроде все эти либы есть в составе Mingw-ы. Может их прсто стянуть с офф. сайта или закачать mingw-install а не пересобирать самостоятельно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
soMan
  опции профиля:
сообщение 7.2.2012, 9:10
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата(Tonal @ 7.2.2012, 9:16) *
Вроде все эти либы есть в составе Mingw-ы. Может их прсто стянуть с офф. сайта или закачать mingw-install а не пересобирать самостоятельно?

Ставил MinGW указав галочку Developer Tools или как-то так. Поставились только стандартные либы (аналоги из Windows SDK). На сайтах можно собранные скачать чуть по старее версии, но меня все же интересует как решить проблему в моем случае врукопашку без обходных путей.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 8.2.2012, 9:03
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


В рукопашную - это разбиратся с системой сборки каждой библиотеки под твою конфигурацию.
По моим воспоминаниям, с zlib - это тривиально, а с OpenSSL - чёрт ногу сломит. К тому же OpenSSL тоже вроде использует zlib...
С libCURL и linSSH2 не разбирался...

Можно ещё выкачать исходники пакетов под мингву - и собрать их разобравшись с настройкой только 1 системы сборки...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 8.2.2012, 9:42
Сообщение #5


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

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

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




Репутация:   12  


в мингве опции статической линковки стандартных библиотек задаются опциями --static-libgcc и --static-libstdc++, многопоточность (точнее, обработка исключений в многопоточности) - флагом -mthreads. если это не Cygwin, то вероятно, понадобится флаг -mno-cygwin.
ещё для работы с исключениями есть флаг -fexceptions. это тоже может вызвать несовместимость.

Сообщение отредактировал Iron Bug - 8.2.2012, 9:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
soMan
  опции профиля:
сообщение 9.2.2012, 0:01
Сообщение #6


Студент
*

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

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




Репутация:   0  


Iron Bug, поигрался я с этими опциями у себя в проекте - ничего, увы, не изменилось. Однако, виновник, видимо, найден. Убрал обращение к защищенным (HTTPS) источникам и теперь отладка проходит без ошибок, все в порядке. Вопрос в следующем: где конкретно я смог накосячить и как правильно пересобрать OpenSSL?
Makefile, по которому собирал OpenSSL после конфигурации. До этого собирал и без опции threads / enable-threads и так же нарывался на SIGSEGV.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 9.2.2012, 7:44
Сообщение #7


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

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

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




Репутация:   12  


Цитата(soMan @ 9.2.2012, 3:01) *
где конкретно я смог накосячить и как правильно пересобрать OpenSSL?

Флаг OPENSSL_IA32_SSE2 явно лишний.
Цитата
Don't set OPENSSL_IA32_SSE2 on x86_64.

http://www.openssl.org/gitweb.cgi?p=openss...4a43e8112ba400f

P.S. а, нет. у тебя же не 64 бита... ща ещё посмотрю, где мог быть косяк.

вот ещё подозрительная настройка:

Цитата
SHLIB_TARGET=cygwin-shared


у тебя точно cygwin, а не msys?

Сообщение отредактировал Iron Bug - 9.2.2012, 7:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
soMan
  опции профиля:
сообщение 9.2.2012, 15:56
Сообщение #8


Студент
*

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

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




Репутация:   0  


Цитата(Iron Bug @ 9.2.2012, 8:44) *
у тебя точно cygwin, а не msys?

Как раз-таки MSYS. При конфигурации я указывал mingw и он мне сконфигурил под мингву.
Вот кусок (строка 507) из Configure, который вроде как отвечает за конфигурацию под мингву:
Цитата
# MinGW
"mingw", "gcc:-mno-cygwin -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -O3 -march=i486 -Wall::-D_MT:MINGW32:-lws2_32 -lgdi32 -lcrypt32:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts} EXPORT_VAR_AS_FN:${x86_asm}:coff:win32:cygwin-shared:-D_WINDLL -DOPENSSL_USE_APPLINK:-mno-cygwin:.dll.a",
# As for OPENSSL_USE_APPLINK. Applink makes it possible to use .dll
# compiled with one compiler with application compiled with another
# compiler. It's possible to engage Applink support in mingw64 build,
# but it's not done, because till mingw64 supports structured exception
# handling, one can't seriously consider its binaries for using with
# non-mingw64 run-time environment. And as mingw64 is always consistent
# with itself, Applink is never engaged and can as well be omitted.
"mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE::-D_MT:MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",

Как видим, он автоматом подставляет cygwin-shared, (а также умудряется прилепить опцию -mno-cygwin). Правильно это или нет, все равно не знаю какими еще значениями можно это заменить. В мейк файле, по-моему, вообще проверяется не пуста ли переменная SHLIB, и, если нет - собираются дллки. Получается, черт и шо пиши в нее, он все равно соберет дллки, но я могу ошибаться.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 9.2.2012, 17:54
Сообщение #9


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

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

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




Репутация:   12  


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

Сообщение отредактировал Iron Bug - 9.2.2012, 17:54
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
soMan
  опции профиля:
сообщение 9.2.2012, 23:42
Сообщение #10


Студент
*

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

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




Репутация:   0  


Iron Bug, если нетрудно, стукни в аську (469815786), пожалуйста, есть неколько небольших вопросов, чтобы тут чат не разводить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 18.4.2024, 21:31