linux下 perl 调用c编译的so库

小试 Perl 调用普通.so文件

首先通过cpan安装Inline和Inlne::C,让perl支持C

$sudo perl -MCPAN -e shell

cpan[2]>install Inline

cpan[2]>install Inline::C

然后做一个测试用的so库,如下:

编译 $gcc -shared -o libperl_c.so libperl_c.c  -I.     库很简单,只是为了测试,这个地方的#ifdef __cplusplus可以有也可以没有,但是如果用别人的库,或许就应该加上这段。区别是生成的库中导出函数的不同,如果形如ctest@MY_TEST_1.0,就需要添加,否则如果直接是ctest,就不用加,这一段应该和库的编译方式有关,后续再专门研究看看。编译后将库拷贝到/usr/lib下

测试perl调用

运行$./perl.pl
17

上面perl.pl中定义LIBS的另外一种方法(MYEXTLIB),测试不能工作,提示错误,原因未知:

而且LIBS => '-L.'指定library路径的方式也不生效,必须将库放到系统目录。更夸张的是perl里面的#include必须用<>,如果写成#include "libperl_c.h"会出错。

参考的链接:

http://www.perlmonks.org/?node_id=151114

http://search.cpan.org/~rurban/Inline-0.54_02/C/C-Cookbook.pod

 

linux下 perl 调用c编译的so库》有2个想法

  1. 您好,请问我通过Inline::C 调用so文件的时候总是提示找不到C方法,大佬能否给个联系方式指导一下。感激不尽

    1. 好久不用这个了,都已经遗忘的差不多了,小小建议从so的提供者或者头文件着手,看一下导出函数的调用方法,从这里入手或许会有眉目

回复 曾继强 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据