Sto cercando di creare un semplice wrapper attorno alla libreria C utilizzando Inline::C. Ho installato libcmark.so
in /usr/local/lib/
.Funzione di chiamata nella libreria C in linea
mio codice attuale è simile al seguente:
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;
Quando si utilizza commonmarker
da uno script ottengo:
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
presumo che la mia chiamata a cmark_markdown_to_html
non corrisponde la sua firma, ma tutti firme per cmark_markdown_to_html
che ho found:
char *cmark_markdown_to_html(const char *text, int len)
Non ho ancora toccato C o Inline :: C, quindi probabilmente mi manca qualcosa.
Tip: Utilizzo di 'q {}' invece di 'qq {}' si intende devono scappare molto meno. Meglio ancora, usare "<< EOC" significa che non devi scappare di niente. – ikegami
Non penso che sia un prototipo non corrispondente. Penso che il simbolo non si trova nella libreria, o la libreria stessa non viene trovata. 'perl -MInline = force, info, noclean script.pl' potrebbe fornire maggiori informazioni. – ikegami