2010-10-20 156 views
1

我试着去建立mod_helloworld.lpr的apache的例子,C:\拉撒路\分量\ fpweb \演示\ HelloWorld的\ apache的大厦mod_helloworld.lpr

拉撒路0.9.29
FPC优化版本2.4。 3 SVN 27129
I386-win32的

添加$(LazarusDir)\fpc\2.4.3\source\packages\fcl-web\src\到其他单元文件(-FU),它会编译,但是当我建立/链接我得到的错误后

mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterCustomImageList 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterMenuItem 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterMenu 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterMainMenu 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterPopupMenu 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterDragImageList 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterControl 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterWinControl 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterGraphicControl 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterCustomControl 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterScrollingWinControl 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterScrollBox 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterCustomFrame 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterCustomForm 
mod_helloworld.lpr(38,1) Error: Undefined symbol: WSRegisterHintWindow 
mod_helloworld.lpr(38,1) Fatal: There were 15 errors compiling module, stopping 

即时通讯它试图添加lcl或东西,但我真的不知道。

+0

BTW,这里是莱昂纳多拉梅关于Apache 2.2模块既Delphi和FPC的第一篇文章:http://leonardorame.blogspot.com/2009 /04/apache-22x-modules-with-delphi.html – 2010-10-21 21:11:33

回答

1

想通了......它认为

加入Interfaces后的使用造成的,我可以得到mod_helloworld编译。

我不知道从哪里来,但我记得要做一个CGI合作编译。

但现在的问题是,我的Apache安装不会除了.dll文件

的LoadModule mod_helloworld “C:\拉撒路\分量\ fpweb \演示\ HelloWorld的\ apache的\ mod_helloworld.dll”

httpd.exe:第013行的语法错误,地址为 C:/ Program Files/Apache Software Foundatio n/Apache2.2/conf/httpd.conf: 无法加载 C:/ lazarus/components/fpweb/demo/hellow orld/apache/mod_helloworld.dll到 服务器:指定的找不到模块 。

,但生病的概率张贴此作为一个新的问题很快

+0

你在配置文件中有.so,你应该拥有.dll文件。这可能是一个扩展不匹配的问题吗? – 2010-10-21 16:21:57

+0

你注意到,我发布答案/问题后,将其更改回.dll仍然没有改变 – 2010-10-29 05:18:58

0

我在Ubuntu 10.04 LTS amd64下有同样的问题。

看一看Problem compiling a WebLaz project under Lazarus.

这其中也可能有助于:How can I compile a Lazarus Apache module to Apache 1.3, 2.0 and 2.2 selectively?

我把“删除不需要的文件夹”选项,并迫使fpc.cfg总是指向httpd22。

我知道这不是最好的,所以我会给出更详细的解释。

我们假设FPSRC包含FPC源文件路径,FPCUNITS包含预编译单元,FPCCFG包含fpc.cfg文件的路径。

如果你看看FPCCFG你会发现,决定的Apache什么版本的块:

#IFDEF FPCAPACHE_1_3 
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd13/ 
#ELSE 
#IFDEF FPCAPACHE_2_0 
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd20/ 
#ELSE 
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/httpd22/ 
#ENDIF 
#ENDIF 

按照建议here你可以把这些指令在FPCCFG的顶部,这样编译器可以达到正确的文件夹。

因此,如果需要编译它们,FPC可以在哪里找到源。

现在我们还有另一个问题:它没有链接到正确的ppu。

如果你看看FPCUNITS,你会发现3个文件夹:httpd13,httpd20和httpd22。

现在,编译器在查找正确的文件夹/单元组合时,会首先在httpd13或httpd20下找到它。如果你想要一个Apache 2.2模块并且会弄糟所有的链接,这并不好。

我没有一个“智能”解决方案,这个困境涉及条件指令,所以我刚刚删除了我不想要的2个文件夹(经过适当的备份以防万一我需要编译/链接针对其他Apache版本)。在我的情况下httpd13和httpd20。

我也必须将“-fPIC”添加到我的编译器选项。这是来自编译器或链接器的错误消息之一,但这是我真正不知道的唯一的事情,如果它是一个全球性的东西或只是我的64位设置。

我希望这可以在Windows下工作。

编辑:我正在构建一个多应用程序项目,并将使用fpmake.pp来编译它。一旦我从fpmake.pp中获得了所有的结果,我也会发布它,以便避免其中的一些问题。

+0

感谢您的回答,我已将http13和http20文件夹全部更名。我只是尝试了-fPIC编译器选项,没有任何改变。 从我所看到的,fPiC选项看起来像一个海湾合作委员会的选项,http://lazarus.freepascal.org/index.php/topic,4298.0.html – 2010-10-20 22:59:21

+0

你有没有得到结果? – 2010-10-21 16:20:26