1

私はグワンに旋風を与えています。

サンプルコードを作成した後、複数のソースファイルを使用して小さなプロジェクトを開始しました。私は今2つの問題を抱えています:

  1. サーバーの起動時にリンクエラーが発生しました:

    main.cppのリンク:未定義のシンボル:_ZN7GwanUrl9concatAllEv

(メインファイル#には他の2つのファイルが含まれます。すべてのファイルはcspディレクトリにあります)

  1. / cspディレクトリにすべてのファイルを置く代わりに、いくつかのgwan関数を使用しながら、/cspディレクトリの外にライブラリを作成したいと思います。悲しいことに、大量のエラーが続きます-G-WANスタートアップ経由ではなくコマンドラインからGCCを実行した場合。

    /home/ec2-user/gwan/include/gwan.h:22、Xbufstream.h:10、Xbufstream.cpp:10からインクルードされたファイル:/usr/include/time.h:199:エラー:'size_t 'タイプに名前を付けません....。

gwan g ++引数文字列がどのように見えるか知っている人はいますか?

(エディターで1.と1.その1.と2.を奇妙に)

4

2 に答える 2

1

まず、これはリンカーの問題ではありません。エラーとしてでは"undefined symbol"なく、問題"unresolved symbol"があります。

これは単に#include問題です。

  1. script.cppファイルでmain()関数を定義します。

  2. と呼ばれるユーザー定義のインクルードファイル専用のG-WANフォルダー/gwan/includeがありますが、正しい構文を使用している場合は、/ csp /my_include.hpp...を使用することもできます。

たとえば、 / csp / hello.cppにあると、ファイルで定義および実装された(または、toto.hppで定義され、#pragmaリンクを使用してスクリプトにリンクされたコンパイル済みライブラリに実装された#include "toto.hpp") C++関数にアクセスできます。gwan/include/toto.hpp

使用する場合は#include <toto.hpp>、代わりにSYSTEM INCLUDE PATHが検索されます(ライブラリが正しくインストールされていれば、これは機能します)。

#include "toto.hpp"システムに設定されていないカスタムフォルダに使用する場合は、G-WANの#pragma include "../my_folder"ディレクティブを使用してそのPATHを指定するか、各インクルードで明示的に指定することができます#include "../my_folder/toto.hpp"

そこには特別なことは何もありません。C/C++の依存関係ルールのみが適用されます(G-WANは、システム設定を伴わない代替方法を提供することで実際に役立ちます)。

ライブラリ(SQLite、Cairo、mySQL、cURLなどのG-WANの例を参照)の場合は、SYSTEM変数に場所をエクスポートしたプレインストールライブラリを使用するか、ライブラリを/gwan/librariesフォルダとインクルードファイルに配置します。/gwan/includeフォルダ内。

独自のライブラリを作成するときは、事前にコンパイルする必要があることに注意してください。これは、コンパイラが「gwan.h」(定義を持つため)を#includeする可能性があるため、明らかにG-WANシンボルを使用できないことを意味しますが、リンカはG-WANシンボルがどこにあるかを認識しません。回避策は、常にG-WANスクリプトからG-WANAPIを使用することです。カスタムライブラリは、汎用であるか、G-WANで使用することを目的としたペイロードをバッファリングする必要があります。G-WANは、 G-WANサーブレットによって提供されることなく構築された永続的な応答set_reply()をG-WANに使用させるための呼び出しを提供するため、二重コピーは必要ありません。reply xbuffer

さて、最後の言葉linking(これはあなたのトラブルの原因ではありませんでしたが、混乱に参加する可能性があります)。CとC++を混在させる場合は、extern C {}Cから呼び出されるC ++プロトタイプをラップするために使用します(そうでない場合は、実際に使用されます"unresolved symbols")。

これらすべての情報があれば、考えられるすべての状況に直面する準備ができているはずです。

于 2012-12-24T08:02:43.653 に答える
0

#includeファイル内でgwan.hシンボルを参照する問題は、.hまたは.hppに関係なく、すべてのコードをヘッダーファイルに移動することでも解決できます。

その不潔ですが、それにもかかわらず修正。そして、私が欲しかった単純な拡張には十分です。

/libraries/sqlite3/sqlite.hを調べると役に立ちました。

@gil、お時間をいただきありがとうございます。

于 2012-12-28T17:51:38.820 に答える