首先,這不是一個鏈接的問題:你有"undefined symbol"
,而不是"unresolved symbol"
爲錯誤。
這只是一個#include
問題。
在script.cpp文件中定義main()函數。
有專門爲所謂的/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"
)。
有了這些信息,你應該準備好面對每一種可能的情況。
來源
2012-12-24 08:02:43
Gil
仍然沒有得到它。我確實想使用G-WAN符號。例如,假設我想: 'Xbufstream&Xbufstream :: operator <<(const char&c){0} {0} {0} xbuf_xcat(xbuffer,「%c」,c); \t return * this; }' –