2010-10-20 2 views
1

Im пытается построить апачский пример из mod_helloworld.lpr, C: \ Lazarus \ компоненты \ fpweb \ демо \ HelloWorld \ апачСтроительство mod_helloworld.lpr

Lazarus 0.9.29
FPC Verion 2,4. 3 СВН 27129
i386-win32

После добавления $(LazarusDir)\fpc\2.4.3\source\packages\fcl-web\src\ в другой блок Files (-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 

im gussing его пытается добавить lcl или что-то в этом роде, но на самом деле я понятия не имею.

+0

Кстати, вот первая статья от Леонардо Рамы о Apache 2.2 модуля как с Delphi и FPC: http://leonardorame.blogspot.com/2009 /04/apache-22x-modules-with-delphi.html –

ответ

1

Фигурного это ... это думает

после добавления Interfaces к использованию вызывает, я могу получить mod_helloworld скомпилировать.

Я не знаю, откуда это взялось, но я помню, как это делалось, чтобы собрать компиляцию CGI.

но проблема теперь, мой апач установить не будет, за исключением .dll

LoadModule mod_helloworld "C: \ Lazarus \ Components \ fpweb \ демонстрационную \ HelloWorld \ Apache \ mod_helloworld.dll"

httpd.exe: Синтаксическая ошибка в строке 63 C:/Program Files/Apache Software Foundation, н/apache2.2/CONF/httpd.conf: не удается загрузить C:/Lazarus/компоненты/fpweb/демо/Hellow orld/apache/mod_helloworld.dll в сервер: указанный модуль не может быть найден .

но плохо Prob этого пост как новый вопрос в ближайшее время

+0

У вас есть .so в файле конфигурации и .dll - это то, что вам нужно. Может быть, проблема с несогласованным расширением? –

+0

yeh заметил, что после того, как я отправил ответ/вопрос, изменил его обратно на .dll, все еще нет изменений –

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.

EDIT: Я создаю проект с несколькими приложениями и буду использовать fpmake.pp для его компиляции. Как только я получу все изломы из fpmake.pp, я также опубликую его, чтобы можно было избежать некоторых из этих проблем.

+0

Спасибо за ваш ответ, я переименовал http13 и http20 папок allready. и я просто попробовал параметр -fPIC компилятора без изменений. Из того, что я вижу, опция fPiC выглядит как опция gcc, http://lazarus.freepascal.org/index.php/topic,4298.0.html –

+0

И вы получили результаты? –