在 Active Perl 脚本中使用定制的 .DLL?
Using a Custom Made .DLL inside Active Perl Scripts?
有关背景信息,请参阅:Migration of Perl Code to Windows: Missing Udunits Package?
如您所见,我成功地创建了三个文件:udunits2.dll、udunits2.lib 和 udunits2.exp,并且我已将它们复制到另一个 Windows 框中安装了活动 Perl。我将这三个文件复制到 c:\windows\system32 和 C:\Perl64\bin 以及相对于调用 Perl .pm 文件但没有成功。我试过像这样的语法:
my $UDUNITS2 = Win32::LoadLibrary('C:\Perl64\bin\udunits2.dll');
if(not defined $UDUNITS2) {
die "Can't import API UDUNITS2";# this doesn't get hit
}
use UDUNITS2;# error happens here.
原始(Linux 代码)使用的是较旧的 udunits 库;根据链接的 S.O 页面,我已经成功地编译了 udunits2。
当我 运行 此代码时,我得到:无法在 @INC
中加载 UDUNITS2.pm
我一定跑远了?!我的猜测是我的 DLL 缺少一些 .Def(定义)文件,这就是 Perl 引擎找不到它的原因?请注意,我认为 udunits2.dll 本身可能没问题,因为我已按照说明进行操作。
有什么想法吗?
谢谢!
use UDUNITS2;# error happens here.
你从哪里得到这个 perl 模块?
UDUNITS2.pm... 支持文件应该与 udunits2.dll/.lib...
接口
其工作原理的示例是 perlxstut/SOso-0.01.patch.txt
LoadLibrary 实际上从未用于此
更新:2015-04-21-19:28:42
你声称你的代码依赖于一个 perl 模块 UDUNITS2.pm 但我在 cpan(或互联网)上找不到这样的模块。
cpan 上有一个名为 Physics::Udunits2 的 perl 模块。
perl模块Physics::Udunits2是动态link库udunits2.dll//.lib的一个接口,来自http://www.unidata.ucar.edu/software/udunits/的(以下简称作为 unidata/udunits2 )
使用 sh/configure/gcc 编译 unidata/udunits2... 并不意味着您已经安装了 Physics::Udunit2,Physics::Udunit2 需要安装步骤,该步骤还包括 compilation/linking 使用 gcc 并生成一个 .dll,其中 link 从 unidata/udunits2.
到 dll
SOso-0.01.patch.txt 是最简单的 perl xs 模块的示例,它需要编译并生成一个 .dll,但它不会 link 到其他库 9,例如 unidata/udunits2)
https://metacpan.org/source/HEIKOK/Physics-Udunits2-0.03/README解释基本步骤
要安装此模块,请键入以下内容:
perl Makefile.PL
make
make test
make install
对你来说重要的是 read/edit https://metacpan.org/source/HEIKOK/Physics-Udunits2-0.03/Makefile.PL
Makefile.PL是Physics::Udunits2告诉ExtUtils::MakeMakerfind/linkudunits2.h和libudunits2的地方,所以它可以编译Physics::Udunits2和link 反对 unidata/udunits2
现在明白了吗?打开 Makefile.PL 并将 INCLUDE/LIBS 编辑为类似
的内容
#~ LIBS => ["-L$udunits_lib_path".' -ludunits2 -lm'], # e.g., '-lm'
#~ LIBS => ["-L/path/to/udunits2dotlib -llibudunits2.lib" ],
LIBS => [ "-l/full/path/to/libudunits2.lib" ],
#~ INC => "-I. -I$udunits_inc_path",
INC => "-I. -I/path/to/udunits2doth",
将 .dll 从 unidata/udunits2 重命名为类似 libudunits2.dll 的名称也是一个好主意...因为 Physics::Udunits2 将生成一个 Physics/Udunits2.dll它自己的。
有关背景信息,请参阅:Migration of Perl Code to Windows: Missing Udunits Package?
如您所见,我成功地创建了三个文件:udunits2.dll、udunits2.lib 和 udunits2.exp,并且我已将它们复制到另一个 Windows 框中安装了活动 Perl。我将这三个文件复制到 c:\windows\system32 和 C:\Perl64\bin 以及相对于调用 Perl .pm 文件但没有成功。我试过像这样的语法:
my $UDUNITS2 = Win32::LoadLibrary('C:\Perl64\bin\udunits2.dll');
if(not defined $UDUNITS2) {
die "Can't import API UDUNITS2";# this doesn't get hit
}
use UDUNITS2;# error happens here.
原始(Linux 代码)使用的是较旧的 udunits 库;根据链接的 S.O 页面,我已经成功地编译了 udunits2。
当我 运行 此代码时,我得到:无法在 @INC
中加载 UDUNITS2.pm我一定跑远了?!我的猜测是我的 DLL 缺少一些 .Def(定义)文件,这就是 Perl 引擎找不到它的原因?请注意,我认为 udunits2.dll 本身可能没问题,因为我已按照说明进行操作。
有什么想法吗?
谢谢!
use UDUNITS2;# error happens here.
你从哪里得到这个 perl 模块?
UDUNITS2.pm... 支持文件应该与 udunits2.dll/.lib...
接口其工作原理的示例是 perlxstut/SOso-0.01.patch.txt
LoadLibrary 实际上从未用于此
更新:2015-04-21-19:28:42
你声称你的代码依赖于一个 perl 模块 UDUNITS2.pm 但我在 cpan(或互联网)上找不到这样的模块。
cpan 上有一个名为 Physics::Udunits2 的 perl 模块。
perl模块Physics::Udunits2是动态link库udunits2.dll//.lib的一个接口,来自http://www.unidata.ucar.edu/software/udunits/的(以下简称作为 unidata/udunits2 )
使用 sh/configure/gcc 编译 unidata/udunits2... 并不意味着您已经安装了 Physics::Udunit2,Physics::Udunit2 需要安装步骤,该步骤还包括 compilation/linking 使用 gcc 并生成一个 .dll,其中 link 从 unidata/udunits2.
到 dllSOso-0.01.patch.txt 是最简单的 perl xs 模块的示例,它需要编译并生成一个 .dll,但它不会 link 到其他库 9,例如 unidata/udunits2)
https://metacpan.org/source/HEIKOK/Physics-Udunits2-0.03/README解释基本步骤 要安装此模块,请键入以下内容:
perl Makefile.PL
make
make test
make install
对你来说重要的是 read/edit https://metacpan.org/source/HEIKOK/Physics-Udunits2-0.03/Makefile.PL
Makefile.PL是Physics::Udunits2告诉ExtUtils::MakeMakerfind/linkudunits2.h和libudunits2的地方,所以它可以编译Physics::Udunits2和link 反对 unidata/udunits2
现在明白了吗?打开 Makefile.PL 并将 INCLUDE/LIBS 编辑为类似
的内容#~ LIBS => ["-L$udunits_lib_path".' -ludunits2 -lm'], # e.g., '-lm'
#~ LIBS => ["-L/path/to/udunits2dotlib -llibudunits2.lib" ],
LIBS => [ "-l/full/path/to/libudunits2.lib" ],
#~ INC => "-I. -I$udunits_inc_path",
INC => "-I. -I/path/to/udunits2doth",
将 .dll 从 unidata/udunits2 重命名为类似 libudunits2.dll 的名称也是一个好主意...因为 Physics::Udunits2 将生成一个 Physics/Udunits2.dll它自己的。