原創文章,轉載請注明原作者與本文原始URL。
版本:
jsoncpp-src-0.5.0.zip
簡介:
jsoncpp是用cpp實現的json庫,可以拼裝,解析,生成json串。
我們要把他編譯成動態庫。
這個庫使用 scons 來組織工程的,並且要用python編譯,而不是我熟悉的Makefile.
要編譯的文件全部位於 ./src/lib_json,其實就3個.cpp文件。
為了編譯方便,我自己寫了Makefile如下:
g++ json_reader.cpp json_value.cpp json_writer.cpp -fPIC -Wall -shared -o ../../build/x64/release/libjson.so -I../../include -I.
編譯windows版本:
編譯windows的時候需要自己建立工程,我用的vs2010,生成動態庫要記得預定義導出宏,JSON_DLL_BUILD ,這樣才能讓dll導出接口類。
在config.h中導出的類是這樣定義的: define JSON_API __declspec(dllexport)
編譯windows版注意的問題:
在此之間有個插曲,如下的代碼:
int main(int argc,char* argv[]) { Json::Reader reader; return 0; }
居然在析構 Reader的時候會崩潰,而linux版本完全沒問題啊,看來是編譯的庫有問題。
最后發現原因是,用vs編譯的時候,把工程配置的“配置類型”有靜態庫改成動態庫,這樣出來的動態庫是有問題的。
解決方法:
重新建立一個動態庫工程,重新添加源碼,編譯,然后可以正常使用了。
這次生成的庫的大小都比舊的小了不少,看來確實不一樣。
總結:
用vs編譯動態庫,要用向導建立動態庫工程;而不能簡單的把“配置類型”改成動態庫,否則雖然編譯沒問題,但是運行會有問題。
原創文章,轉載請注明原作者與本文原始URL。
