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.a
http::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