我正在用Perl编写一个使用Mojolicious和Sqlite的程序。我将使用Par Packer将其作为.exe文件分发,以便在其他Windows计算机上部署。
我在Windows上使用Strawberry Perl进行开发。
我使用下面的windows批处理文件和Par打包程序来生成一个.exe文件:
pp -o hallo.exe ^
-x ^
-l libeay32__.dll ^
-l zlib1__.dll ^
-l ssleay32__.dll ^
-a lib ^
-a public ^
-a templates ^
-a "C:\strawberry\perl\site\lib\Mojo\entities.txt;Mojo\entities.txt" ^
-a "C:\Strawberry\perl\vendor\lib\Mojolicious\resources\public;Mojolicious\public" ^
-a "C:\Strawberry\perl\vendor\lib\Mojolicious\resources\templates;Mojolicious\templates" ^
-a "D:\Perl\main.db" ^
hallo.cgi上面的方法运行得很好,但是当我尝试运行hello.exe时,我一引入SQLite就得到了以下错误:
DBD::SQLite::db prepare failed: no such table: librarieshallo.cgi在正常运行时工作正常。例如,perl hallo.cgi。但是,当所有内容都编译成一个.exe文件时,就会出现Sqlite错误。
这里发生的情况是,main.db (一个SQL lite数据库文件)与hallo.cgi (或hallo.exe)在同一位置,但是当我运行hallo.exe时,SQLite无法找到main.db,因此它自己创建了一个main.db,但是因为它是自己创建的,所以数据库中没有数据,因为它找不到库表。
我该如何着手解决这个问题呢?
在上面我用于编译的批处理文件中,我包含了用于解析打包程序的main.db,但它似乎完全忽略了这一行:
-a "D:\Perl\main.db" ^发布于 2020-05-21 14:38:57
我已经通过查看$ENV{PWD}是什么解决了这个问题。($ENV{PWD}表示工作目录),并使用chdir切换到工作目录。一旦进入其中,SQlite就能够获得文件并正常工作。请注意,在我的源代码中,我的操作包括解析打包程序所需的库和模块,这造成了工作目录更改的情况。将其更改为原始工作目录解决了此问题。
https://stackoverflow.com/questions/39637332
复制相似问题