Próbuję zrobić proste opakowanie wokół biblioteki C przy użyciu Inline::C. Zainstalowałem libcmark.so
w /usr/local/lib/
.Funkcja wywoływania w bibliotece Inlined C
Mój bieżący kod wygląda następująco:
package Text::CommonMark;
use strict;
use warnings;
sub commonmarker {
my $text = shift;
return commonmark_to_html($text);
}
use Inline C => qq{
char* commonmark_to_html(char* thetext) {
char* result = cmark_markdown_to_html(thetext, strlen(thetext));
return result;
}
} => LIBS => '-L/usr/local/lib/ -llibcmark.so';
1;
Podczas korzystania commonmarker
ze skryptu uzyskać:
perl: symbol lookup error: /home/erik/sublimeworks/dists/Text-CommonMark/_Inline/lib/auto/Text/CommonMark_33fb/CommonMark_33fb.so: undefined symbol: cmark_markdown_to_html
Przypuszczam, że moje wezwanie do cmark_markdown_to_html
nie pasuje do jego podpisania, ale wszystko podpisy dla cmark_markdown_to_html
, które mam found wyglądają tak:
char *cmark_markdown_to_html(const char *text, int len)
Nie dotknąłem ani C, ani Inline :: C, więc prawdopodobnie czegoś brakuje.
Tip: Użycie 'q {}' zamiast '' qq {} oznacza, że Muszę uciec znacznie mniej. Co więcej, użycie '<< 'EOC'' oznacza, że nie musisz w ogóle uciekać od czegokolwiek. – ikegami
Nie sądzę, że jest to niedopasowany prototyp. Myślę, że symbol nie został znaleziony w bibliotece lub sama biblioteka nie została znaleziona. 'perl -MInline = force, info, noclean script.pl' może dostarczyć więcej informacji. – ikegami