libc++ 无法处理 FCGI Streambuf
libc++ can't handle fcgi streambuf
我想用fcgi和nginx在C++11中编写一个网站。目前,只有Clang++与libc++相结合才能完全支持C++11。
但是,当我运行fcgi程序时,当有人通过浏览器请求页面时,我会遇到seg错误: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/htmlrn" <<
"rn" <<
"<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应用程序并使用libc++?
我在使用同一组工具时遇到了完全相同的问题。
正如Dietmar Kühl所指出的,libfcgi++不是用libc++编译的,这是我的问题。对他来说是+1000。非常感谢。
作为一个快速的黑客测试,我重新编译了最新的稳定libfcgi,其中包含以下标志:
-stdlib=libc++
通过像往常一样运行./configure
,然后编辑fcgi-dev-kit/libfcgi/Makefile
:中Makefile中的两行
CXX = clang++
# ....
CXXFLAGS = -g -O2 -std=c++0x -stdlib=libc++
然后在顶层目录中运行CCD_ 3。
例如,与fcgi-dev-kit/libfcgi/.libs/libfcgi++.a中的结果库链接,修复了分段错误。
开发工具包可以在这里找到:http://www.fastcgi.com/drupal/node/5.如果你需要像我一样使用libc++,你需要找到一个长期的解决方案来链接一个经过适当编译的libfcgi++。
相关文章:
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- Writing uin32_t to asio::streambuf
- Boost::asio::streambuf consumption() 不清空缓冲区
- 字符 - 'pub' 在 std::streambuf::p ubsetbuf() 方法中是什么意思?
- 取得 streambuf/stringbuf 数据的所有权
- 将 std::string 转换为 boost::asio::streambuf
- 在发送/获取结构时使用 streambuf
- Boost ASIO ForwardIterator for streambuf
- boost::asio::streambuf::consume-注入垃圾字符
- 从boost asio streambuf读取会将字节保持在缓冲区中
- 是否可以将字符串的 streambuf 直接传递给 filebuf?
- 如何访问boost :: asio :: streamBuf输入作为字符串
- 如何复制或重复使用boost :: asio :: streambuf
- 与Spawn-fcgi相比,具有C 的FastCGI
- 为gzipped流编写自定义streambuf的问题
- boost::asio::streambuf-如何重用缓冲区
- 我可以在nginx + spawn-fcgi中永远打开MySQL连接吗?
- BOOST :: ASIO :: StreamBuf收缩到合适
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- libc++ 无法处理 FCGI Streambuf