parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Есть ли прецеденты сборки парсера под amd64 ?

Elik 06.12.2006 01:23

Есть два сервера amd64

1. На первом стоит FreeBSD 6.1 Cходу собрать парсер не удалось, поэтому поставил скомпилированный от 4.10 и compat4x - работает без проблем.

2. На втором FreeBSD 5.5. Аналогичный трюк не получился - в системе не оказалось 32-битного линкера (/libexec/ld-elf32.so.1) и возможно вообще 32-битных библиотек. Решил собрать честный 64-битный парсер.

С какими проблемами столкнулся:

1. boehm-gc не знает про комбинацию amd64 + FreeBSD. Вылечилось установкой из ports - там есть все необходимые патчи.

2. WARNING в следуюущем месте:

union Languages {

struct {
#ifdef PA_LITTLE_ENDIAN
Language lang:8;
int is_not_just_lang:sizeof(CORD)*8-8;
#elif defined(PA_BIG_ENDIAN)
int is_not_just_lang:sizeof(CORD)*8-8;
Language lang:8;
#else
# error word endianness not determined for some obscure reason
#endif
} opt;
CORD langs;

warning: width of `String::Languages::<anonymous struct>::is_not_just_lang' exceeds its type

Подумал, увеличил is_not_just_lang до long long int. Ругаться перестало, но какие последствия могут быть - не знаю.

На этом этапе парсер стал запускаться и успешно обрабатывать файлик из двух строчек.

3. Не цеплялcя mysql-driver. Штатная диагностика - "Can't open module", пришлось залезть в исходники, чтобы вытащить ошибку dlopen'а. Ошибка оказалась невозможностью найти какой-то символ с длинным названием. Поскольку ранее приходилось писать свой драйвер, то нашел как пересобрать mysql'ный. Вот эта строчка помогает:

g++ -DHAVE_CONFIG_H -I. -I. -I. -I../../parser3/src/sql -I./libltdl -I/usr/local/include/mysql -g -O2 -fPIC -shared parser3mysql.C -o libparser3mysql.so -lc libltdl/ltdl.lo

Возможно нужно будет изменить пути при сборке в другом окружении.

4. ^xdoc::create[] падает в кору в следующем месте:
#0 0x0000000000417db3 in transcodeToUTF8 (.......)
at pa_charset.C:329
329 case 1: *--outPtr = XMLByte(curVal | gFirstByteMark[encodedBytes]);


На этом месте я сломался. Отладчик говорит, что encodedBytes=63, что по логике предыдущего фрагмента кода невозможно.