Библиотека Google RE2 не может скомпилироваться с помощью ‘make testinstall’ в Ubuntu

Gurus!

Я использую Ubuntu 13.10 64-bit для компиляции последней библиотеки Google RE2, но «make testinstall» не удалось скомпилировать, вот журнал:

kevin @ ubuntu: ~ / re2 $ make testinstall

cp testinstall.cc obj
(cd obj && g ++ -I / usr / local / include -L / usr / local / lib testinstall.cc -lre2 -pthread -o testinstall)
/tmp/ccSsaSXS.o: в функции main':
testinstall.cc:(.text+0xce): undefined reference to
re2 :: FilteredRE2 :: FirstMatch (re2 :: StringPiece const&, std :: vector> const&) const ‘
/usr/local/lib/libre2.so: неопределенная ссылка на pthread_rwlock_rdlock'
/usr/local/lib/libre2.so: undefined reference to
pthread_rwlock_wrlock»
/usr/local/lib/libre2.so: неопределенная ссылка на pthread_rwlock_destroy'
/usr/local/lib/libre2.so: undefined reference to
pthread_rwlock_init»
/usr/local/lib/libre2.so: неопределенная ссылка на `pthread_rwlock_unlock ‘
collect2: error: ld вернул 1 состояние выхода
делать: * [testinstall] Ошибка 1

Я попытался заменить -pthread на -lpthread, но все равно потерпел неудачу, затем сбросил libre2.so и обнаружил, что в нем есть pthread_xxx.
Вот отслеживание проблемы на форуме RE2: https://code.google.com/p/re2/issues/detail?id=100

Кто-нибудь здесь когда-либо успешно выполнял RE2? Спасибо!

2

Решение

Увидеть этот комментарий:

Добавление -pthread в LDFLAGS, кажется, исправляет make test (все тесты
мимоходом), но не make testinstall,

Это приведет вас к следующей ошибке

1

Другие решения

В зависимости от того, что вы создаете для ‘make testinstall’, может не потребоваться.
Мне просто нужно было заставить работать порт Python re2, и это можно установить после запуска make install.

0

Я столкнулся с этой проблемой раньше. Измените make-файл и используйте -lpthread вместо -pthread.

0

Поэтому я попытался найти строки в testinstall.cc, которые вызывали ошибки символов, и обнаружил, что единственная строка была в строке 18:

18 — f.firstMatch (: abbccc :, ids);

Я закомментировал эту строку (так что функция FullMatch ниже все еще вызывается) и просто запустил g ++ testinstall.cc -lre2 -pthread -o testinstall (в основном, что делает Makefile), и я смог успешно получить двоичный файл. Хотя это может и не решить проблему, полезно знать, что мы все еще можем использовать функции RE2 :: Fullmatch и частичное совпадение.

Если бы я догадался, может быть, есть зависимость где-то внутри модуля Filter_re2?

0

У меня такая же проблема. Но если вы скомпилируете с -static все идет хорошо.

nm -C показывает, что «пропавший» символ существует в обоих .a а также .so файлы.

0
По вопросам рекламы [email protected]