2012-12-24 79 views
1

我給Gwan一個漩渦。g-wan:/ csp之外的構建庫和g ++編譯問題

通過示例代碼,我開始了一個包含多個源文件的小項目。我現在有兩個問題:

  1. 我得到了在服務器啓動時的連接錯誤:

    鏈接的main.cpp:未定義的符號:_ZN7GwanUrl9concatAllEv

(主文件來#include兩其他文件;所有文件都在csp目錄中)

  1. 作爲所有f iles在/ csp目錄中,我想在/ csp目錄之外創建一個庫,同時仍然使用一些gwan函數。可悲的是,每當我從命令行輸入GCC而不是通過G-WAN啓動時,都會產生大量錯誤。

    在文件中包含從/home/ec2-user/gwan/include/gwan.h:22, 從Xbufstream.h:10, 從Xbufstream.cpp:10: /usr/include/time.h :199:錯誤:爲size_t「沒有指定類型 .....

有人知道金桂冠G ++參數字符串的樣子?

(奇數1和1的1和2的編輯器)

+0

仍然沒有得到它。我確實想使用G-WAN符號。例如,假設我想: 'Xbufstream&Xbufstream :: operator <<(const char&c){0} {0} {0} xbuf_xcat(xbuffer,「%c」,c); \t return * this; }' –

回答

1

首先,這不是一個鏈接的問題:你有"undefined symbol",而不是"unresolved symbol"爲錯誤。

這只是一個#include問題。

  1. 在script.cpp文件中定義main()函數。

  2. 有專門爲所謂的/gwan/include用戶定義包括文件G-WAN文件夾,但您可以如用/csp/my_include.hpp ...如果你使用了正確的語法:

例如,在/csp/hello.cpp有#include "toto.hpp"讓我達到C++函數定義並在gwan/include/toto.hpp文件中實現(或toto.hpp定義和實現在鏈接到使用#pragma腳本預編譯庫鏈接)。

如果您寧願使用#include <toto.hpp>,那麼將會搜索SYSTEM INCLUDE PATH(而這會起作用,前提是您的庫已正確安裝)。

如果你想使用#include "toto.hpp"因爲這是不是在系統設置自定義文件夾,您可以使用G-WAN的#pragma include "../my_folder"指令指定的路徑,也可以顯式地指定它在每個包括:#include "../my_folder/toto.hpp"

沒有什麼特別的地方,只有C/C++依賴規則適用(並且G-WAN通過提供不涉及系統設置的替代方法真的有所幫助)。

對於庫(請參閱SQLite,Cairo,mySQL,cURL等的G-WAN示例),您可以使用預安裝的庫,將它們的位置導出到SYSTEM變量中或將庫放入/gwan/libraries文件夾及其包含文件在/gwan/include文件夾中。

在編寫自己的庫時,請記住它們需要預編譯。這意味着你顯然不能使用G-WAN符號,因爲你的編譯器可能會包含「gwan.h」(用於定義),但是你的鏈接器不知道從哪裏可以找到G-WAN符號。解決方法是始終使用G-WAN腳本中的G-WAN API。您的自定義庫必須是通用的,或者緩衝G-WAN將使用的任何有效負載。由於G-WAN提供set_reply()呼叫以讓G-WAN使用持久回覆內置G-WAN servlets提供的reply xbuffer,因此不需要雙重複制。

現在,最後一個字linking(這不是你的麻煩的原因,但可以參與混淆)。如果混合使用C和C++,則使用extern C {}來包裝從C調用的C++原型(否則您將真的具有"unresolved symbols")。

有了這些信息,你應該準備好面對每一種可能的情況。

+0

Hi Gil。感謝#include提示。指定PATH有時可能會令人困惑。 –

+0

我在庫中使用GWAN的JSON和KV商店調用。訣竅是使用函數指針並將它們初始化爲GWAN C腳本中相應的GWAN調用。這種方法的好處是庫可能不依賴GWAN,並且如果需要可以回退到其他JSON或KV商店實現。 –

+0

Ogla,函數指針初始化(對於高級用戶來說是一種複雜的方法)最好在連接處理函數的int()調用中實現(這在服務器的生命週期中執行一次)。 – Gil

0

引用裏面的#include文件gwan.h符號,也可以通過將所有代碼放到頭文件解決,無論是其.H或.HPP

其不適度但不過修復的問題。對於我想要的簡單擴展也足夠了。

尋找到/libraries/sqlite3/sqlite.h幫助。

@gil,謝謝你的時間。