我正在尝试构建C:\lazarus\components\fpweb\demo\helloworld\apache的apache示例mod_helloworld.lpr
Lazarus 0.9.29
FPC标准2.4.3 SVN 27129
I 386-win32 32
在将$(LazarusDir)\fpc\2.4.3\source\packages\fcl-web\src\添加到其他Unit (-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之类的东西,但我真的不知道。
发布于 2010-10-20 23:23:01
弄明白了..。它认为
在将Interfaces添加到用户原因之后,我可以让mod_helloworld编译。
我不知道这是从哪里来的,但我记得我这么做是为了得到一个CGI的联合编译。
但是现在的问题是,除了.dll之外,我的apache安装是不会的。
"C:\lazarus\components\fpweb\demo\helloworld\apache\mod_helloworld.dll“LoadModule mod_helloworld
httpd.exe: C:/Program //Apache2.2/conf/httpd.conf:无法加载C:/lazarus/components/fpweb/demo/hellow /apache/mod_helloworld.dll第63行的语法错误:无法找到指定的模块。
不过,我很快就会把这作为一个新问题提出来。
发布于 2010-10-20 10:45:47
在Ubuntu10.04LTS 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包含预编译单元,fpc.cfg包含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可以在哪里找到它们。
现在我们有了另一个问题:它不能与右路连在一起。
如果您查看FPCUNITS,您会发现3个文件夹: httpd13、httpd20和httpd22。
现在,编译器在寻找正确的文件夹/单元组合时,将首先在httpd13或httpd20下找到它。如果您想要一个Apache2.2模块,并且会破坏所有的链接,这是没有好处的。
对于这个困境,我没有一个“聪明”的解决方案,它涉及条件指令,所以我只是删除了我不想要的两个文件夹(经过适当的备份,以防我需要针对其他Apache版本编译/链接)。就我而言,httpd13和httpd20。
我还必须将"-fPIC“添加到编译器选项中。这是来自编译器或链接器的错误消息之一,但这是我唯一不知道的事情,它是一个全局的事情,还是我的64位设置。
不过,我希望这在Windows环境下能奏效。
编辑:我正在构建一个多应用程序项目,并将使用fpmake.pp来编译它。一旦我摆脱了fpmake.pp的所有缺陷,我也会发布它,这样我们就可以避免其中的一些问题。
https://stackoverflow.com/questions/3974952
复制相似问题