첫째,이 링커 문제가되지 않습니다 : 오류로 "undefined symbol"
보다는 "unresolved symbol"
있습니다.
이것은 단지 #include
문제입니다.
귀하의 script.cpp 파일에 main() 함수를 정의하십시오.
이 /gwan/include
라는 사용자 정의 포함 파일에 전념 한 G-WAN 폴더입니다하지만 당신이 올바른 구문을 사용하는 경우뿐만 아니라 ... /csp/my_include.hpp를 사용할 수 있습니다
을 예를 들어, /csp/hello.cpp에 #include "toto.hpp"
있는 것은 나를 정의와 gwan/include/toto.hpp
파일에을 구현 (또는 이의 #pragma와 스크립트에 연결된 미리 컴파일 된 라이브러리에 toto.hpp에 정의 구현 ++ 기능을 C에 도달 할 수 있습니다 링크).
대신 #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
폴더에 저장하십시오.
자신의 라이브러리를 작성할 때 미리 컴파일해야한다는 점에 유의하십시오. 이것은 컴파일러가 (정의를 포함하기 위해) "gwan.h"를 # 포함 할 수 있지만 링커는 G-WAN 심볼을 찾을 수있는 곳을 알 수 없으므로 분명히 G-WAN 심볼을 사용할 수 없다는 것을 의미합니다. G-WAN 스크립트에서 항상 G-WAN API를 사용하는 방법이 있습니다. 커스텀 라이브러리는 범용이거나 G-WAN이 사용할 페이로드를 버퍼해야합니다. G-WAN은 호출을 사용하여 G-WAN 사용 영구 회신을 G-WAN 서블릿이 제공하는 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) { \t xbuf_xcat (xbuffer, "% c", c); \t return * this; }' –