Building mod_helloworld.lpr
我正在尝试构建 mod_helloworld.lpr 的 apache 示例,C:\\\\\\\\lazarus\\\\\\\\components\\\\\\\\fpweb\\\\\\\\demo\\\\\\\\helloworld\\\\\\\\apache Lazarus 0.9.29 将 我在猜测它试图添加 lcl 什么的,但我真的不知道。 想通了……它认为 在uses中加入 我不知道那是从哪里来的,但我记得这样做是为了让 CGI 协同编译。 但现在的问题是,我的 apache 安装不会除了 .dll
FPC Verion 2.4.3 SVN 27129
i386-win32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
LoadModule mod_helloworld"C:\\\\lazarus\\\\components\\\\fpweb\\\\demo\\\\helloworld\\\\apache\\\\mod_helloworld.dll"
httpd.exe: Syntax error on line 63 of
C:/Program Files/Apache Software
Foundatio n/Apache2.2/conf/httpd.conf:
Cannot load
C:/lazarus/components/fpweb/demo/hellow
orld/apache/mod_helloworld.dll into
server: The specified module could not
be found.
但我很可能很快就会将此作为一个新问题发布
我在 Ubuntu 10.04 LTS amd64 下遇到了同样的问题。
看看在 Lazarus 下编译 WebLaz 项目时遇到的问题。
这个也可能有帮助:如何选择性地将 Lazarus Apache 模块编译为 Apache 1.3、2.0 和 2.2?
我选择了"删除不必要的文件夹"选项并强制 fpc.cfg 始终指向 httpd22。
我知道这不是最好的,所以我会给出更详细的解释。
假设 FPSRC 包含 FPC 源文件路径,FPCUNITS 包含预编译单元,FPCCFG 包含 fpc.cfg 文件的路径。
如果您查看 FPCCFG,您会发现一个决定 Apache 版本的块:
1 2 3 4 5 6 7 8 9 | #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 |
按照这里的建议,您可以将这些指令放在 FPCCFG 的顶部,以便编译器可以访问正确的文件夹。
这样,如果 FPC 需要编译它们,它就可以在哪里找到源代码。
现在我们有另一个问题:它没有链接到正确的 ppu。
如果您查看 FPCUNITS,您会发现 3 个文件夹:httpd13、httpd20 和 httpd22。
现在编译器在寻找正确的文件夹/单元组合时,会首先在 httpd13 或 httpd20 下找到它。如果您想要一个 Apache 2.2 模块并且会破坏所有链接,这并不好。
我没有针对这个困境的"智能"解决方案,一个涉及条件指令的解决方案,所以我只删除了我不想要的 2 个文件夹(在正确备份后,以防我需要编译/链接其他 Apache 版本)。在我的例子中 httpd13 和 httpd20.
我还必须将"-fPIC"添加到我的编译器选项中。它是在来自编译器或链接器的错误消息之一中提出的,但这是我唯一不知道它是全局的还是我的 64 位设置的。
我希望这可以在 Windows 下运行。
编辑:我正在构建一个多应用程序项目,并将使用 fpmake.pp 来编译它。一旦我解决了 fpmake.pp 的所有问题,我也会将其发布,以便避免其中一些问题。