2010-10-20 73 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