0

GET をサポートする C++ で単純な Web サーバーを作成しています。動的コンテンツをサポートするために、プログラムとして機能する動的オブジェクトを作成します。つまり、 のような URL のリクエストexample.com/dynamicContent/124は に送信されますdynamicContent.dll

モジュールは、次の機能を実装する必要があります。

extern "C" __declspec (dllexport) int handle_request(http::request*, http::response*);

プロトタイプは正常に動作しますが、使用しようとするstd::stringとプログラムがクラッシュします。APIにはコンテンツ/コンテンツタイプなどを設定するためのメソッドが含まれており、文字列オブジェクトを期待しているのでhttp::response、私は本当にイライラしています.

モジュールは、同じコンピューター上の Web サーバーとまったく同じ g++ バージョンでコンパイルされます。テスト モジュールの Makefile は次のとおりです。

g++ -c modules/TestModule.cpp
g++ -g -Wall -o modules/dynwindows.dll TestModule.o libsol.a
g++ -g -Wall -o dynamic_windows.exe dynamic_windows.cpp libsol.a

libsol.ahttp::requestと を実装したライブラリhttp::responseです。

関数は次のとおりです。

extern "C" __declspec (dllexport) int handle_request(http::request* request, http::response* response)
{
    std::string name = "yo"; // this handle sigsegv
    response->set_status(200);
    response->set_body(name);
    return 1;
}

更新 次のmakeは物事を機能させます..理由は何ですか?

g++ -shared -g -o modules/dynwindows.dll \
-Wl,--export-all-symbols \
-Wl,--enable-auto-import \
-Wl,--whole-archive TestModule.o \
-Wl,--no-whole-archive libsol.a
4

0 に答える 0