2016-07-23 61 views
0

我都是新来的Perl,但我有一个perl脚本,需要大量的模块工作,所有都在文件夹lib /中找到,当我尝试运行脚本,并开始加载模块(使用x;)调用dynaloader x时脚本失败;说不能找到可加载的对象的模块x @INC然后我觉得这些模块具有共享对象(.so)文件,dynaloader无法找到,它的名字都是形式libx.so,他们在同一个文件夹中。 pm文件..所以问题是我如何使dynaloader加载模块和共享库。Perl - DynaLoader无法找到可加载对象

任何帮助将不胜感激。 页数: -i我正在通过cygwin运行脚本。 - 这些模块是语言环境模块,我没有他们的makefile.pl,我也无法得到它。

+0

你确定共享对象(.so)的Cygwin的人? 'file your_shared_object.so'的输出是什么? – matzeri

+0

也许你需要设置'LD_LIBRARY_PATH'来包含正确的路径?请参阅[%ENV不起作用,我无法使用共享库](http://stackoverflow.com/questions/8657005/env-doesnt-work-and-i-cannot-use-shared-library) –

+0

+HåkonHægland LD_LIBRARY_is设置为/ lib文件夹 – Helmy

回答

0

从Cygwin的网站

的Cygwin的第一页是不是:

一种方式来运行本地Linux上的Windows应用程序。如果您希望它在Windows上运行,您必须从源代码重建应用程序。

办法神奇地让原生的Windows应用意识到像信号的pty等UNIX®功能同样,你需要的,如果你想利用Cygwin的 功能,从源代码编译您 应用。

由于你的共享库是ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped你有一个为Unix/Linux 32位构建的包。它不能在Cygwin/Windows上运行。

Windows上的格式是PE32

$ file /usr/bin/cygreadline7.dll 
/usr/bin/cygreadline7.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows 
$ file /cygdrive/c/windows/system32/kernel32.dll 
/cygdrive/c/windows/system32/kernel32.dll: PE32+ executable (DLL) (console) x86-64, for MS Windows