我想使用fcgi和nginx在C++ 11中编写一个网站。目前只有Clang ++与libC++结合完全支持C++ 11。libC++无法处理fcgi streambuf
但是当我运行我的FCGI程序,我得到一个赛格故障,当有人请求该页面在浏览器:它似乎的libC++不喜欢FCGI如何使用流。
测试 - 编码:
#include <iostream>
#include <sstream>
#include "fcgio.h"
int main() {
int count = 0;
FCGX_Request request;
FCGX_Init();
FCGX_InitRequest(&request, 0, 0);
while(FCGX_Accept_r(&request) == 0) {
fcgi_streambuf cout_fcgi_streambuf(request.out);
std::ostream fout(&cout_fcgi_streambuf);
fout << "Content-type: text/html\r\n" <<
"\r\n" <<
"<title>CGI Hello!</title>" <<
"<h1>CGI Hello!</h1>" <<
"Request number" << ++count << "\n" << std::endl;
}
return 0;
}
上面用编译的代码:
clang++ -stdlib=libc++ -o index index.cpp -lfcgi++ -lfcgi -std=c++11 -g
GDB输出以下:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000402bd9 in sputc (this=0x7fffffffe4d0, __c1=0, __c=10 '\n', __c2=4210300) at /usr/include/c++/v1/streambuf:351
351 *__nout_++ = __c;
如果我编译它没有-stdlib = libC++一切工作正常,除了我不能使用一些C++ 11功能...
有没有一种方法可以运行我的fcgi-app而不会崩溃并使用libC++?
您是否用选项编译fcgi ++,特别是使用相同的标准C++库? –
fcgi未编译,只安装“apt-get install libfcgi-dev”。 – al3xst
那么,它编译了哪个标准C++库?如果它没有用libC++编译,那么它不太可能用于libC++。从它的声音中,您正在使用与libstdC++和libC++相同版本的libfcgi ++:这不会起作用!标准C++库不兼容。实际上令人惊讶的是,代码链接在第一位。尝试使用libC++构建libfcgi ++,并查看产生的库是否解决了您的问题。 –