1

mod_helloworld.lpr、C:\lazarus\components\fpweb\demo\helloworld\apache の Apache サンプルをビルドしようとしています。

Lazarus 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か何かを追加しようとしていますが、本当にわかりません。

4

2 に答える 2

1

それを考え出した...それは思う

uses 原因に追加Interfacesした後、mod_helloworld をコンパイルすることができます。

それがどこから来たのかはわかりませんが、CGI の共同コンパイルを取得するために行ったことを覚えています。

しかし、問題は今、私のApacheインストールは.dllを除外しません

LoadModule mod_helloworld "C:\lazarus\components\fpweb\demo\helloworld\apache\mod_helloworld.dll"

httpd.exe: C:/Program Files/Apache Software Foundation/Apache2.2/conf/httpd.conf の 63 行目の構文エラー: C:/lazarus/components/fpweb/demo/hellow orld/apache/mod_helloworld を読み込めませんサーバーへの .dll: 指定されたモジュールが見つかりませんでした。

しかし、これをすぐに新しい質問として投稿する可能性は低い

于 2010-10-20T23:23:01.810 に答える
0

Ubuntu 10.04LTSamd64でもまったく同じ問題が発生しました。

LazarusでWebLazプロジェクトをコンパイルする際の問題をご覧ください。

これも役立つかもしれません:LazarusApacheモジュールをApache1.3、2.0、2.2に選択的にコンパイルするにはどうすればよいですか?

「不要なフォルダを削除する」オプションを選択し、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

ここで提案されているように、コンパイラが適切なフォルダに到達できるように、これらのディレクティブをFPCCFGの先頭に配置できます。

これにより、FPCがソースをコンパイルする必要がある場合にソースを見つけることができる場所が処理されます。

今、私たちは別の問題を抱えています:それは正しいppuに対してリンクしていません。

FPCUNITSを見ると、httpd13、httpd20、httpd22の3つのフォルダーがあります。

これで、コンパイラは正しいフォルダ/ユニットの組み合わせを探しているときに、最初にhttpd13またはhttpd20の下でそれを見つけます。Apache 2.2モジュールが必要で、すべてのリンクが失敗する場合、これは適切ではありません。

このジレンマに対する「スマートな」ソリューションはありません。条件付きディレクティブが関係しているため、不要な2つのフォルダーを削除しました(他のApacheバージョンに対してコンパイル/リンクする必要がある場合に備えて適切なバックアップを行った後) )。私の場合、httpd13とhttpd20です。

また、コンパイラオプションに「-fPIC」を追加する必要がありました。コンパイラまたはリンカからのエラーメッセージの1つで提案されましたが、これがグローバルなものであるか、64ビットセットアップであるかを私が本当に知らない唯一のことです。

ただし、これがWindowsで機能することを願っています。

編集:私は複数のアプリプロジェクトを構築しており、fpmake.ppを使用してすべてをコンパイルします。fpmake.ppからすべてのねじれを取り除いたら、これらの問題のいくつかを回避できるように、それも投稿します。

于 2010-10-20T10:45:47.810 に答える