gcc опции компилятора и нестыковка либ |
Здравствуйте, гость ( Вход | Регистрация )
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овским вышеперечисленным?
|
|
|
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 |
Вроде все эти либы есть в составе 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 |
где конкретно я смог накосячить и как правильно пересобрать 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 |
у тебя точно 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), пожалуйста, есть неколько небольших вопросов, чтобы тут чат не разводить.
|
|
|
Текстовая версия | Сейчас: 18.4.2024, 21:31 |