2013-05-22 8 views
4

Как мне создать модуль Perl XS на OpenBSD, если отсутствуют необходимые файлы .so?Создание модуля расширения perl на OpenBSD

Справочная информация: на ваниле OpenBSD 5.3 vm install, я не могу создать модуль perl, который необходимо связать с -lpthread. pthread.a и pthread.so.Maj.Min do есть в системе.

Однако Makefile.PL ищет pthread.so, который отсутствует. Является ли это обычным для OpenBSD? (Я могу заставить Makefile связываться с pthread.a, и все работает отлично, как это бывает.)

В среде Redhat-ish Linux я просто установил правильный -devel RPM и снова зашел. Однако в OpenBSD мне не хватает чего-то очень общего в среде разработки.

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

ответ

0

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 пакет. В комплект поставки входят батареи.

+0

Да; что-то еще было не так - было обнаружено волшебное обнаружение библиотек Dynaloader библиотек. Достаточно близко. – pilcrow

0

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

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

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

+0

Правильно, но это не может быть стандартной практикой для такого рода вещей. Как бы вы динамически скомпилировали пользовательскую программу против pthread - каждый раз создавайте правильные символические ссылки? Это не кажется правильным. – pilcrow

+0

Не кажется мне правильным. Обычно я видел, как это делал Distro Vendor/Package Author/Makefile. Не могу сказать, если это отличная идея, просто сообщая, что я видел. – tjd