我想使用 fcgi 和 nginx 用 C++11 编写一个网站。目前只有 Clang++ 结合 libc++ 支持完全 C++11。
但是当我运行我的 fcgi 程序时,当有人通过浏览器请求页面时,我得到一个 seg-fault:似乎 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 功能......</p>
有没有办法可以运行我的 fcgi-app 而不会崩溃并使用 libc++?