2012-03-17 118 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英寸