Сборка модуля расширения Perl на OpenBSD
Как мне построить Perl-модуль XS на OpenBSD при необходимости .so
файлы отсутствуют?
Предыстория: при установке vanilla OpenBSD 5.3 vm я не могу собрать модуль perl, который должен быть связан с -lpthread
, pthread.a и pthread.so.Maj.Min существуют в системе.
Однако Makefile.PL ищет pthread.so
, которого нет. Это нормально для OpenBSD? (Я могу заставить Makefile связываться с pthread.a, и все работает отлично, как это бывает.)
В среде Redhat-ih Linux я бы просто установил правильную -devel
Обороты и поехали снова. Однако в OpenBSD мне не хватает чего-то очень простого в среде разработки.
ОБНОВЛЕНИЕ Основной проблемой было неправильное обнаружение Dynaloader библиотек внутри Makefile.PL.
2 ответа
Makefile неверен, сообщите об ошибке в апстрим. Это никогда не должно искать определенный файл. Посмотрите этот пример:
$ cat test.c
int main(){
return 0;
}
$ gcc -lpthread -o test test.c
$ ldd test
test:
Start End Type Open Ref GrpRef Name
00000c4321600000 00000c4321a02000 exe 1 0 0 test
00000c4521f63000 00000c4522374000 rlib 0 2 0 /usr/lib/libpthread.so.17.1
00000c4524c1c000 00000c4525103000 rlib 0 1 0 /usr/lib/libc.so.68.2
00000c452a100000 00000c452a100000 rtld 0 1 0 /usr/libexec/ld.so
Кроме того, в OpenBSD вам не нужно устанавливать -devel
пакет. OpenBSD имеет батареи в комплекте.
Хотя редактирование вашего Makefile.PL - один из способов, я обычно вижу, как люди используют файлы ссылок, чтобы указать общие имена библиотек / исполняемых файлов на имена, специфичные для версии.
For Example:
pthread.so -> pthread.so.maj.min
pthread.so.maj -> pthread.so.maj.min
Таким образом, вещи, которым нужна "последняя" версия, могут получить ее по ссылке и считают, что просто забота о основной версии может захватить самую последнюю версию ее основной версии...