Сборка модуля расширения 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

Таким образом, вещи, которым нужна "последняя" версия, могут получить ее по ссылке и считают, что просто забота о основной версии может захватить самую последнюю версию ее основной версии...

Другие вопросы по тегам