2017-06-20 38 views
-2

我试图将一个Perl遗留软件移植到Amazon的AWS服务器上,但是当试图使我需要的所有组件工作时,我总是遇到问题。Perl CPAN的Pg模块在Amazon的AWS服务器上工作

目前,我有Perl启动和运行(版本5.16.3)和PostgreSQL(9.2.18)作为我的数据库没有问题。他们都单独运行,但我根本无法让他们一起工作。

此旧版软件使用Pg库(我不是指DBD::Pg,只是Pg)。但是,我无法运行引用特定库的脚本。我得到以下错误:

Can't locate loadable object for module Pg in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 /var/www/cgi-bin) at /var/www/cgi-bin/teste.pl line 8.

经过一番研究,我明白,我莫名其妙地失踪的依赖是Pg要求才能正常工作。我打开Pg.pm脚本来检查它使用什么,并尝试通过CPAN导入它们。

我设法通过cpan导入ExporterCarp成功,但DynaLoader根本不会安装 - 显然它需要编译?

我需要怎么做才能正确安装Pg

+0

您可能需要libpg库的头文件来编译XS组件。 – choroba

+0

@ Sinar-Ünür完全诚实,我只是运行命令行来安装Perl。我不知道DynaLoader已经在那里,或者我不会试图再次安装它。 –

+0

我的上帝,我怎么能错过?我的坏@SananÜnür。 顺便说一句,我确认DynaLoader已经安装,这是我得到的错误的原因 - 没有什么可以安装/更新。 –

回答

0

我从来没有用过Pg,所以我们来试试我的ArchLinux安装。

$ curl -O https://cpan.metacpan.org/authors/id/M/ME/MERGL/pgsql_perl5-1.9.0.tar.gz 
$ tar xvf pgsql_perl5-1.9.0.tar.gz 
$ cd pgsql_perl5-1.9.0 
$ perl Makefile.PL 
$ perl Makefile.PL 
Configuring Pg 
Remember to actually read the README file ! 
please set environment variables POSTGRES_INCLUDE and POSTGRES_LIB 

所以,如果你安装Pg,你必须设置这些变量。最简单的方法是为这些库安装您选择的发行版软件包。在ArchLinux的,下面的命令安装这些对我来说:

$ sudo pacman -S postgresql-libs 

然后:

$ POSTGRES_INCLUDE=/usr/include POSTGRES_LIB=/usr/lib perl Makefile.PL 
Configuring Pg 
Remember to actually read the README file ! 
OS: linux 
Generating a Unix-style Makefile 
Writing Makefile for Pg 
Writing MYMETA.yml and MYMETA.json 

构建工程,但我无法测试,因为我没有一个PostgreSQL实例连接。然而,这个工程:

$ perl -I blib/lib -I blib/arch -e 'use Pg; print "ok\n"' 
ok 

注意-I交换机上面不会有必要了我选择安装这个模块,最后更新17年前。

+1

你的解决方案并不完美,但指出了我的正确道路。首先,我不确定在第一次导入脚本时POSTGRES_INCLUDE和POSTGRES_LIB变量是否设置不正确,但是当我再次使用参数时,它工作得很好。 但是,错误仍然发生,这次是因为缺少一些Postgres依赖项(特别是libpq-fe.h),并且因为没有安装GCC。导入缺少.h并安装GCC后,导入成功。 –