Сборка модуля расширения 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-ish Linux я бы просто установил правильный -devel RPM и пошел снова. Однако в OpenBSD мне не хватает чего-то очень простого в среде разработки.

ОБНОВЛЕНИЕ Основной проблемой было неправильное определение Dynaloader библиотек внутри Makefile.PL.


person pilcrow    schedule 22.05.2013    source источник


Ответы (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 включены батарейки.

person Rufo El Magufo    schedule 22.05.2013
comment
Да; что-то еще неладно — Dynaloader волшебно определяет библиотеки, которые сломаны. Достаточно близко. - person pilcrow; 22.05.2013

Хотя редактирование вашего Makefile.PL является одним из способов, я обычно вижу, что люди используют файлы ссылок, чтобы указать общие имена библиотек / исполняемых файлов на имена, специфичные для версии.

For Example:
    pthread.so -> pthread.so.maj.min
    pthread.so.maj -> pthread.so.maj.min

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

person tjd    schedule 22.05.2013
comment
Верно, но это не может быть стандартной практикой для такого рода вещей. Как бы вы динамически скомпилировали пользовательскую программу для pthread — каждый раз вручную создавая правильные символические ссылки? Это не кажется правильным. - person pilcrow; 22.05.2013
comment
Мне тоже не кажется правильным. Обычно я видел, как это делал поставщик дистрибутива/автор пакета/Makefile. Не могу сказать, хорошая ли это идея, просто сообщаю о том, что видел. - person tjd; 23.05.2013