gpt4 book ai didi

c++ - libc++ 无法处理 fcgi streambuf

转载 作者:行者123 更新时间:2023-11-30 04:15:06 28 4
gpt4 key购买 nike

我想用 C++11 使用 fcgi 和 nginx 编写一个网站。目前只有结合 libc++ 的 Clang++ 完全支持 C++11。

但是当我运行我的 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++?

最佳答案

我在使用同一组工具时遇到了完全相同的问题。

正如 Dietmar Kühl 指出的那样,libfcgi++ 不是用 libc++ 编译的,这对我来说是个问题。 +1000给他。非常感谢。

作为一个快速的 hacky 测试,我使用标志重新编译了最新的稳定 libfcgi:

-stdlib=libc++

照常运行 ./configure,然后在 fcgi-dev-kit/libfcgi/Makefile 中找到的 Makefile 中编辑两行:

CXX = clang++
# ....
CXXFLAGS = -g -O2 -std=c++0x -stdlib=libc++

然后在顶层目录运行make

例如,与 fcgi-dev-kit/libfcgi/.libs/libfcgi++.a 中生成的库链接,修复了段错误。

可在此处找到开发套件:http://www.fastcgi.com/drupal/node/5 .如果您像我一样需要使用 libc++,则需要找出一个与适当编译的 libfcgi++ 链接的长期解决方案。

关于c++ - libc++ 无法处理 fcgi streambuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18559678/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com