Использование Perl с скомпилированной библиотекой C? - PullRequest
3 голосов
/ 24 октября 2009

Я хотел бы попробовать Perl, но мне нужно связаться с другим приложением, которое я написал.У меня есть интерфейсная библиотека, которую я написал на C ++, и она содержит протоколы сокетов и интерфейсный протокол для установки / получения параметров в моем приложении.

Я хотел бы использовать Perl с Apache для обслуживания веб-страниц для настройкимое заявление.Мне нужно знать, как заставить Perl общаться с моей интерфейсной библиотекой.

Ответы [ 5 ]

7 голосов
/ 24 октября 2009

О Боже, если вы новичок в Perl. Вы не хотите смотреть на XS (я не новичок в Perl и не хочу смотреть на XS). См. Inline :: C или Inline :: CPP , где гораздо более мягкое введение в вызовы C и C ++ из Perl. Детализация вглубь интерфейса XS необходима только в том случае, если вы хотите начать передавать или возвращать сложные структуры данных (и, возможно, даже тогда).

use Inline C => Config => LIBS => '-L/<yourlibpath> -l<yourlib>';

$x = my_library_function_that_returns_an_int_or_double($integer_arg,$string_arg);
3 голосов
/ 24 октября 2009

Если вы решили не идти по маршруту inline-C, в Perl есть встроенная поддержка сокетов , Отличное руководство по работе с IPC и нескольким объектам , чтобы помочь с сокетами в целом (плюс, google предоставит вам много других уроков по использованию сокетов perl). Если вы можете / хотите повторно реализовать коммуникационную часть сокетов, вам может даже не понадобиться C / C ++.

3 голосов
/ 24 октября 2009

Похоже, вы хотите общаться с библиотекой C из Perl. Вы можете прочитать perldoc perlxs и perldoc perlxstut , чтобы узнать больше об интерфейсе XS. Если вы хотите сделать обратное (вызвать Perl из C), прочитайте также perldoc perlguts и perldoc perlembed .

Когда вы сталкиваетесь с конкретными проблемами, дайте SO еще один крик, и кто-то наверняка поможет вам. :)

1 голос
/ 26 октября 2009

Во-первых, позвольте мне сказать, что XS - сравнительно небольшой набор ключевых слов, который облегчает перенос библиотек C для использования из perl (см. perlxstut и perlxs ).Однако, чтобы использовать его, вам нужно изучить API perl (см. perlapi ), что, в свою очередь, требует поверхностных знаний о том, как работает компилятор perl (см. perlguts инесколько устаревшие, но все еще очень полезные проиллюстрированные perl * ).Это многому научиться одновременно.Вкратце:

  • Сам XS => не сложно
  • perlapi => умеренно трудно
  • внутренняя работа perl => довольно тяжело
  • всев то же время выше> = ouch

При этом, если вы хотите обернуть библиотеку C ++, взгляните на модуль ExtUtils :: XSpp в CPAN.Это идет с очень простым примером.Модуль не настолько старый и все еще совершенствуется, но он делает упаковку C ++ намного удобнее.

PS: Если вы планируете учить все сразу, учитесь на примерах.Проверьте Поваренные книги Дина Рериха .Возможно, используйте в качестве моделей несколько простых модулей XS: Parse :: ExuberantCTags , Math :: FFTW или один из множества других в CPAN.

1 голос
/ 24 октября 2009

Вам нужно создать модуль для вашей библиотеки C ++, если вы не хотите использовать Inline :: CPP. Это можно сделать автоматически с помощью h2xs : h2xs --autogen-xsubs. Сначала установите C :: Scan из CPAN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...