2012-03-17 115 views
1

我发现了很多Perl的东西,但没有为C++。我现在正在运行Ubuntu,但我对它并不熟悉,所以简单的指令会很棒。我刚刚编写了一个小型C++程序作为CGI工作,我需要对其进行测试。谢谢!如何为C++ CGI脚本配置apache?

回答

2

你不应该需要做什么特别的事情;只是把它编译成一个名为*.cgi(或诸如此类的东西)的可执行文件,并确保你在你的服务器配置或.htaccess或诸如此类的东西有

AddHandler cgi-script .cgi 

(或诸如此类的东西)。

(免责声明:。它已经多年,因为我做到了这一点,所以我可能会忘记的东西,但是我认为这应该是你所需要的)

+0

但是要考虑:每个平台都有自己的依赖策略。举例来说,在Windows中,你必须将依赖的dll放在系统目录或cgi的同一个文件夹中(请查看http://www.dependencywalker.com)以及我解释的其他平台。 – softghost 2012-03-17 22:03:33

+0

谢谢,它得到它的工作!事实证明,我需要这样做,并在根目录中创建一个cgi-bin文件夹,并将其放在那里,供那些刚刚发现此问题的人使用。 – theeggman85 2012-03-18 01:04:33

1

没有什么特别的C++程序。 CGI程序由Web服务器执行。因此,先决条件与Perl脚本/程序一样。

下面是一些提示得到一个C++ CGI程序启动和运行。

  • 把一个简单的可执行文件放在cgi-bin目录下,并使其可以被web服务器执行。准备一个简单的程序,返回一个有效的CGI响应,例如

    #include <iostream> 
    using namespace std; 
    
    int main() 
    { 
        cout << "Content-Type: text/html" << endl << endl; 
        cout << "Hello to Apache and Firefox!" << endl; 
        return 0; 
    } 
    
  • 在命令行中执行程序并检查输出是否以下列行开始。确保Content-Type之后的空行。

    $ ./hello_world 
    Content-Type: text/html 
    
    Hello to Apache and Firefox! 
    
  • 增加的LogLevel调试,并期待到Web服务器的错误日志。搜索访问日志,错误日志和suexec.log。查看您正在使用的虚拟主机的日志以及主要的error.log。在我的Ubuntu系统上,文件位于/var/log/apache2,并命名为access.log,error.log和suexec.log。我的一个问题,最后是“目录是由别人写的:” ......

  • 使用的DLL确保库仍然可以在Web服务器上。将RPATH设置为指向带库的自定义目录。在这方面lddobjdump -x <executable> | grep RPATH是你的朋友。 (Apache文档中的这个提示并不适合我:使用Apache的mod_cgi模块的ScriptLog指令来观察输入和输出ScriptLog只能在开发服务器上使用更多详细信息请参考mod_cgi页。)

  • 更多的提示显示文章Debugging Apache Web Server Problems英寸