0

我正在用 C++ 编写一个支持 GET 的简单 Web 服务器。为了支持动态内容,我将制作动态对象作为程序。即对 URL 之类的请求example.com/dynamicContent/124将被发送到dynamicContent.dll.

模块必须实现以下功能:

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

我可以让原型正常工作,但是当我尝试使用std::string时,程序崩溃了。由于http::responseAPI 包含设置内容/内容类型等的方法,并且期望字符串对象,我真的很沮丧。

这些模块在同一台计算机上使用与 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
4

0 回答 0