为什么使用<iostream>在Apache上导致500错误
Why does compiling with <iostream> cause a 500 error on Apache?
我正在使用gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)在C++中尝试cgi编程,当我试图在我的商业apache服务器上运行它时,我遇到了一个奇怪的错误。
Apache将在编译后运行以下内容:
#include <cstdio>
// no <iostream>
int main(int c, char **argv)
{
printf("Content-Type: text/html; charset=ISO-8859-1nn");
printf("Hello printfnn");
return 0;
}
但是,如果iostream包含,服务器会返回500错误
#include <cstdio>
#include <iostream> //this will cause a 500 error
int main(int c, char **argv)
{
printf("Content-Type: text/html; charset=ISO-8859-1nn");
printf("Hello printfnn");
return 0;
}
如果我用iostream编译第二个程序,该程序将从命令行完美运行,但如果我上传代码,apache将开始返回500个错误。
为了完整起见,我只使用cstio在C和Free Pascal以及C++中编译了类似的程序。没有问题。。。
只有当我包含iostream时,问题才会出现。
注意:我没有忘记更改权限
注意:我包含了"内容类型:text.html;charset=ISO-8859-1\n\n"
这就像我的服务器不接受用iostream编译的东西一样。
为什么iostream会导致此错误,而cstio没有,我该如何修复?
当本地计算机上的C++编译器版本与服务器上的版本不匹配时,可能会遇到此问题。很可能,#include <iostream>
会触发编译器从libc++
引入代码,而忽略它也会忽略libc++
依赖关系。
为了避免这个问题,您可以尝试使用-static
进行静态链接。这样做的优点是从本地副本中提取所有相关的代码,但确实会导致更大的可执行文件和更大的内存占用。
或者,您可以使用工具ldd
调查所需的共享库版本,并确保在服务器计算机上安装适当的版本。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- Apache IGNITE编译ODBC驱动程序错误
- Apache HTTPD模块共享内存权限拒绝了错误
- Apache Ignite v2.7:无法构建 Linux ODBC 驱动程序 - 内联变量编译错误
- cmakelists.txt的apache节俭错误
- Apache 崩溃并显示错误 R6016 没有足够的空间来存储线程数据
- 将CGI中的错误消息重定向到Apache日志文件
- 为什么使用<iostream>在Apache上导致500错误
- Apache Thrift教程中的c++链接器错误-未定义的符号
- 在Apache服务器中设置指令时出现不兼容的指针类型错误