`

在Perl调用C/C++代码/动态链接库

    博客分类:
  • perl
 
阅读更多

原文http://manew.org/?p=62

perl想到的,几乎都可以实现(当然, 其它语言也可以实现, 只是方便程序不同而已).

还有几乎无所不包的Cpan

在C中, 当然可以调用C代码, 包括内嵌的C语句, 或C/C++写的动态链接库.

调用方面用的多的有两个: XS和Inline::C ,这里使用了inline::c

嵌入动态链接库:

例如我有一个运态链接库名字为libmylib.so,放在默认的目录下, 里面有个函数CheckDomain(in, out), 第一个参数为输入参数, 第二个参数是返回参数, 我们可以写一个wapper,然后像下面这样调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/perl -w
use Inline C => Config => LIBS => '-lmylib';
use Inline C;
use strict;
$| = 1;
my $ip = '10.10.10.10';
my $domain = ';;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;';
my $ret = getDomain($ip, $domain);
if($ret == 0)
{
	$domain =~ s/;+//g;
	print $domain, "\n";
} else
{
	print "error\n";
	exit 1;
}
 
__END__
__C__
int getDomain(char *in, char *out)
{
	return CheckDomain(in, out);
}

 

如果不需要动态链接库, 直接嵌入C语句, 就更简单一些, 在下面直接写代码, 在上面调用即可。

注: 为何上面的$domain变量写了许多没用的分号?因为可能是C和perl的空间分配不同, C中是靠代码中自己控制的, 而perl中编码人员不需要关心。 这两个的差异会造成一个问题:perl中你分配置了2字节, 则在c中返回的参数中也只能返回2字节(会不会溢出?呀呀呀)。故在perl中多分配了一些长度。

分享到:
评论

相关推荐

    swig使用手册

    5. **动态加载与静态链接:** SWIG生成的模块可以通过动态链接库(DLL)或静态库的形式与脚本语言环境链接,前者提供更好的模块独立性和更新灵活性,后者则更适用于嵌入式环境。 #### 六、SWIG基本使用指南 SWIG的...

    swig实例java调用c

    本实例主要讲解如何使用Swig来实现Java调用C代码,并通过DLL动态链接库进行交互。 首先,Swig是一个接口生成器,它读取源代码中的特定注释,然后生成必要的绑定代码,使得Java、Python、Perl等语言可以调用C或C++的...

    swig的学习以及国密的python封装.zip_python 国密_swig的学习以及国密的python封装_国密

    - 编译C/C++源码:使用SWIG生成的绑定代码和原始C/C++代码一起编译成动态链接库。 - 导入Python:在Python环境中,导入生成的模块,即可调用C/C++的函数。 4. **国密算法的Python封装**: - 分析C/C++实现:理解...

    swigwin-1.3.40

    4. **编译C/C++代码**:将生成的绑定代码与原始C/C++源代码一起编译成动态链接库。 5. **加载和使用**:在Tcl脚本中,加载生成的库,并通过Tcl命令调用C/C++函数。 **总结** SWIGwin-1.3.40是连接C/C++和Tcl的...

    NRZOV.rar_系统编程_C/C++_

    2. "pPERFDLLS" - 这个文件名可能指的是一个动态链接库(DLL)文件,可能是用于性能测试或分析的。在C/C++中,DLLs可以被多个程序共享,以减少内存占用和提高效率。 3. "ACFPDH" - 这个文件名没有明确的上下文,但它...

    SWIG是一种软件开发工具,可将用C和C++编写的程序与各种高级编程语言连接起来_C++_下载.zip

    生成的接口代码通常包含一个编译好的动态链接库,以及一组用于调用C/C++函数的封装类或模块。 SWIG具有以下特点: 1. **自动内存管理**:SWIG能够自动处理C/C++中的指针和内存管理,确保在脚本语言中使用时不会出现...

    swigwin-3.0.10.zip

    3. 使用C/C++编译器(如Visual Studio)编译`example_wrap.cxx`,生成动态链接库(如`_example.pyd`)。 4. 在Python脚本中,通过`import example`来调用C/C++的函数。 总之,SWIGwin-3.0.10.zip为Windows用户提供...

    swigwin-3.0.12

    4. **链接到脚本语言**:将生成的绑定代码与C/C++库一起编译,形成动态链接库或静态库,最后在目标脚本环境中加载使用。 ### 2. Swigwin-3.0.12的主要特点 - **兼容性**:Swigwin-3.0.12支持Windows平台,包括32位...

    SWIGDocumentation

    - **封装技术**:介绍了实现脚本语言调用C/C++代码的主要技术手段,包括包装函数、变量链接、常量处理、结构体/类的映射以及代理类的使用等。 - **动态加载**:针对脚本语言扩展模块的构建过程,讨论了共享库和动态...

    swig win download

    6. **编译绑定代码**:接下来,你需要使用C/C++编译器(如GCC或Visual Studio)编译生成的绑定代码,链接到SWIG的库和目标库,创建一个动态链接库(DLL)或Python扩展模块。 7. **使用生成的模块**:最后,在你的...

    swigwin-4.1.1.zip

    3. **编译中间代码**:将SWIG生成的中间代码与原始C/C++库一起编译,形成动态链接库或可执行文件。 4. **在目标语言中使用**:在Python、Java等目标语言中,可以导入生成的模块,直接调用C/C++库中的函数和方法。 ...

    tswig:探索SWIG工具

    3. **编译C/C++代码**:使用常规的编译步骤(如g++或gcc)编译C/C++源代码,并生成动态链接库(如.so或.dll)。 4. **编译Java代码**:将SWIG生成的Java源代码编译成.class文件。 5. **运行Java程序**:在Java程序...

    SWIG4.0开发手册

    SWIG(Simplified Wrapper and Interface Generator)是一种开源的软件开发工具,旨在帮助程序员将C或C++代码库与高级编程语言如Python、Perl、Ruby、Tcl、PHP等进行接口封装,实现代码重用和扩展。使用SWIG,可以...

    swigwin-3.0.0.zip

    4. 编译中间代码:将SWIG生成的C或C++代码与原始的C或C++库一起编译,生成动态链接库或可执行文件。 5. 在目标语言中导入模块:最后,你可以在Python等脚本语言中导入生成的模块,然后像使用本地语言的库一样使用它...

    libperl.so openssh、openssl、perl.zip

    在IT领域,libperl.so是一个重要的动态链接库文件,它属于Perl编程语言。Perl是一种功能强大的脚本语言,常用于文本处理、系统管理任务以及网络编程。libperl.so是Perl解释器的核心组件,包含了Perl运行时所需的许多...

    SWIG源码及工具

    3. **编译中间代码**:将生成的中间语言文件与你的C/C++源代码一起编译,形成动态链接库(DLL)或共享库。 4. **在目标语言中导入模块**:在Python等目标语言中,你可以导入生成的模块,然后像使用本地对象一样调用C...

    swig学习资料.doc

    SWIG 是一种自动接口生成器,它能够从 C/C++ 函数和类的声明中自动生成所需的包装代码,使这些函数和类可以被其他脚本语言调用。 **2.2 为什么使用 SWIG?** SWIG 提供了一种简单而高效的方法来实现 C/C++ 代码与...

    module-jni:Qore Java JNI模块

    5. **编译和加载JNI库**:将C/C++代码编译成动态链接库(如.so或.dll),然后在Java代码中通过`System.loadLibrary()`加载该库,使Java程序能够调用本地方法。 6. **在Qore中使用Java对象**:在Qore中,可以创建...

    PCRE++/PCRE静态库

    使用静态库的优点在于,应用程序在编译时就会链接到库的全部代码,不需要在运行时寻找动态链接库,这可以简化部署过程,避免因缺少依赖库而导致的运行错误。但缺点是生成的可执行文件较大,因为包含了所有库的代码。...

Global site tag (gtag.js) - Google Analytics