Есть проект, использующий pcre libs.
На одном сервере (linux 2.6.15, gcc 3.4.4, pcre 6.3) исполняемый файл с shared и static линковкой работает отлично, а вот на другом (linux 2.4.21, gcc 3.2.3, pcre 6.3) static работает, а вот при shared линковке отказываются работать регулярки.Флаги компиляции:
static:
`pcre-config --cflags-posix` `pcre-config --libs-posix` -lpthread -static
shared:
`pcre-config --cflags-posix` `pcre-config --libs-posix` -lpthreadПодскажите, пожалуйста, в чем может быть проблема?
Выражение "отказываются работать" вряд ли может помочь в поиске проблемы.
Details, please.А так - первое подозрение: при статической линковке линкуется одна ("работающая")
библиотека, при динамической - естественно, другая (вероятно, "неработающая").
>Details, please.Да нет, проблема не в этом... Я тут опреднлил, что регулятка типа "&?([^=]+)=([^&]+)" парсится нормально, а вот "<SearchResultItemArray>(.*?)<\\/SearchResultItemArray>" уже не парсится (при shared).
Т.е. regcomp() отрабатывает, а вот regexec() уже нет...
Повторяю, при static все работает.
>Повторяю, при static все работает.Тогда вариантов всего два:
1. Криво собран pcre - так, что в динамически слинкованной версиипроявляется некий баг.
2. При динамической линковке линкуется "не та", левая какая-нибудь библиотека. Либо линкуется правильная, а при запуске грузится неправильная. Дефольная системная, скажем - если pcre доставлялось дополнительно ручками.
>>Повторяю, при static все работает.
>
>Тогда вариантов всего два:
>
>1. Криво собран pcre - так, что в динамически слинкованной версиипроявляется некий
>баг.
>
>2. При динамической линковке линкуется "не та", левая какая-нибудь библиотека. Либо линкуется
>правильная, а при запуске грузится неправильная. Дефольная системная, скажем - если
>pcre доставлялось дополнительно ручками.Заработало. Спасибо.
Действительно, дело было в старых библиотеках, которые линковались при shared компиляции.