我正在用 C++ 编写一个支持 GET 的简单 Web 服务器。为了支持动态内容,我将制作动态对象作为程序。即对 URL 之类的请求example.com/dynamicContent/124
将被发送到dynamicContent.dll
.
模块必须实现以下功能:
extern "C" __declspec (dllexport) int handle_request(http::request*, http::response*);
我可以让原型正常工作,但是当我尝试使用std::string
时,程序崩溃了。由于http::response
API 包含设置内容/内容类型等的方法,并且期望字符串对象,我真的很沮丧。
这些模块在同一台计算机上使用与 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