0

我正在使用 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-1\n\n");
    printf("Hello printf\n\n");
    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-1\n\n");
    printf("Hello printf\n\n");
    return 0;
}

如果我用 iostream 编译第二个程序,该程序将从命令行完美运行,但如果我上传代码,apache 开始返回 500 错误。

只是为了完整起见,我只使用 cstdio 在 C 和 Free Pascal 以及 C++ 中编译了类似的程序。没问题...

仅当我包含 iostream 时才会出现问题。

注意:我没有忘记更改权限。

注意:我包括了“Content-Type: text/html; charset=ISO-8859-1\n\n”

就像我的服务器不接受用 iostream 编译的东西。

当cstdio没有时,为什么iostream可能会导致此错误,我该如何解决?

4

1 回答 1

1

当本地机器上的 C++ 编译器版本与服务器上的版本不匹配时,您可能会遇到此问题。十有八九#include <iostream>会触发编译器从 引入代码libc++,而将其排除在外也会忽略libc++依赖关系。

为避免此问题,您可以尝试使用-static. 这具有从本地副本中提取所有相关代码的优势,但确实会导致更大的可执行文件和更大的内存占用。

或者,您可以使用该工具调查所需的共享库版本ldd,并确保在服务器计算机上安装了适当的版本。

于 2013-08-05T13:46:40.447 回答