锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
寮鍙戞晥鐜囷細Windows涓嬪彲浠ラ氳繃VisualStudio榪涜寮鍙戯紝鍏朵粬騫沖彴鍙互浣跨敤MonoDevelop錛岄潪甯告柟渚?/p>
榪愯鏁堢巼錛欽IT鐨勬ц兘浼樺寲姣旇緝鍒頒綅錛岃兘閫傚簲90%鎬ц兘鐜
閮ㄧ講渚挎嵎鎬э細鍙互閫氳繃浜ゅ弶緙栬瘧鐢熸垚鍏朵粬騫沖彴鐨勫彲鎵ц鏂囦歡錛岄氳繃mono榪愯鍙墽琛屾枃浠?/p>
璋冭瘯渚挎嵎鎬э細VisualStudio鍜孧onoDevelop璋冭瘯鍧囧緢鏂逛究錛?榪樺彲榪滅▼璋冭瘯
涓婃墜搴︼細瀵笴緋昏璦鐔熸倝鐨勫嚑澶╁氨鍙笂鎵?/p>
鐑洿鏂幫細鍙互閫氳繃DLL鏂瑰紡榪涜
Web瀵規帴錛氬彲鍋氾紝浠g爜姣旇緝鍟板棪
宕╂簝澶勭悊錛氬彲閫氳繃try catch鎹曡幏閿欒
緗戠粶搴撶紪鍐欓毦搴︼細涓鑸紝闇娉ㄦ剰gc闂
絎笁鏂圭綉緇滃簱鍙婃鏋舵暟閲忥細涓鑸?/p>
寮鍙戞晥鐜囷細楂?/p>
榪愯鏁堢巼錛氬茍鍙戜笂闈炲父鏈変紭鍔匡紝瀵笴PU鍒╃敤鐜囨瘮杈冮珮錛屽師鐢熻繍琛屾棤铏氭嫙鏈?/p>
閮ㄧ講渚挎嵎鎬э細涓嬈$紪璇戝埌澶勮繍琛岋紝鏃犱換浣曡繍琛屽簱渚濊禆
璋冭瘯渚挎嵎鎬э細瀹為檯鎿嶄綔涓紝鍗曠嚎紼嬫寕鎺ヨ皟璇曞櫒鍙錛?浣嗗彉閲忔樉紺轟笉姝g‘錛屽紑鍙戞湡鍩烘湰閲囩敤鏃ュ織鏂瑰紡榪涜鏌ラ敊
涓婃墜搴︼細璇█綆鍗曪紝鐗規у皯錛?鏂版墜1鍛ㄨ兘璐$尞浠g爜
鐑洿鏂幫細鏃犳硶榪涜鐑洿鏂幫紝璇█鏃犳硶緙栬瘧涓篋LL錛屼篃涓嶆敮鎸丏LL鍔犺澆錛坙inux騫沖彴鐨?so鍔犺澆蹇界暐涓嶈錛?/p>
Web瀵規帴錛氶潪甯告柟渚匡紝 浠g爜綺劇畝
宕╂簝澶勭悊錛氬穿婧冨悗浠ュ懡浠よ鏂瑰紡鎵撳嵃鍑烘爤錛岀▼搴忓唴鍙互鎹曡幏浠諱綍宕╂簝閿欒騫剁戶緇繍琛?/p>
緗戠粶搴撶紪鍐欓毦搴︼細綆鍗曪紝姣擟 socket鏇寸畝鍗?/p>
絎笁鏂圭綉緇滃簱鍙婃鏋舵暟閲忥細鍋忓皯
寮鍙戞晥鐜囷細鍩轟簬鍔ㄦ佽璦鐨勫紑鍙戝垵嬈″啓姣旇緝蹇紝鍚庢湡緇存姢鍜岄噸鏋勪細鑰楄垂涓瀹氱殑鏃墮棿鍦ㄦ煡閿欎笂
榪愯鏁堢巼錛氬熀浜巐ua jit鐨勮繍琛屾晥鐜囪繕鏄兘鎺ュ彈鐨?/p>
閮ㄧ講渚挎嵎鎬э細鏂逛究錛?鍙湁搴曞眰淇敼闇瑕侀噸鏂扮紪璇戯紝 澶ч儴鍒嗘椂闂村彧鐢ㄦ洿鏂發ua鏂囦歡
璋冭瘯渚挎嵎鎬э細涓嶆槸寰堟柟渚匡紝鍩轟簬鏃ュ織鏂瑰紡榪涜鏌ラ敊
涓婃墜搴︼細lua璇█鐗規ф湁閮ㄥ垎鍜孋緋昏璦鏈変竴瀹氬樊寮傦紝鍩轟簬Actor妯″瀷鐨勬濇兂瀛︿範錛岄傚簲闇瑕佽楄垂涓瀹氱殑鏃墮棿
鐑洿鏂幫細綾諱技浜嶦rlang錛屽彲綺劇‘鍒板嚱鏁扮駭鐨勭儹鏇存柊
Web瀵規帴錛氭湁涓浜沨ttp鏀寔錛岄氳繃紺懼尯鎱㈡參榪涜瀹屽杽
宕╂簝澶勭悊錛歭ua澶╃敓鍙互鎹曡幏閿欒
緗戠粶搴撶紪鍐欓毦搴︼細鑷甫錛屾棤闇緙栧啓
絎笁鏂圭綉緇滃簱鍙婃鏋舵暟閲忥細閫氳繃紺懼尯鎱㈡參瀹屽杽
寮鍙戞晥鐜囷細緙栬瘧鎱紝鏂囦歡澶氾紝閫氱敤搴撳皯
榪愯鏁堢巼錛歯ative閫熷害鏍囨潌
閮ㄧ講渚挎嵎鎬э細緙栧啓鍚勭被鐨刴ake闂ㄦ杈冮珮
璋冭瘯渚挎嵎鎬э細鍙氳繃VisualStudio榪涜Windows騫沖彴璋冭瘯
涓婃墜搴︼細2~3騫寸粡楠岀殑鐔熸墜浠嶇劧浼氬啓鍑哄穿婧冨拰娉勯湶浠g爜
鐑洿鏂幫細鍙氳繃DLL榪涜
Web瀵規帴錛氫唬鐮佸暟鍡︼紝絎笁鏂瑰簱灝?/p>
宕╂簝澶勭悊錛歐indows涓嬪彲浣跨敤SEH鎹曡幏孌靛紓甯革紝鍏朵粬騫沖彴鍙兘閫氳繃宕╂簝鍚庤繘琛宑oredump鍒嗘瀽錛屽閿欓潪甯稿樊
緗戠粶搴撶紪鍐欓毦搴︼細鍩轟簬asio緙栧啓杈冧負綆鍗曪紝浣嗘諱綋鐪嬫潵闅懼害涓嶄綆
絎笁鏂圭綉緇滃簱鍙婃鏋舵暟閲忥細杈冨
浠ヤ笅鏄緱鍒?/p>
浠庡彂鏂囨椂鐨勯」鐩榪欎簺璇█浣跨敤鐜囨潵璇達紝Java錛孍rlang錛孋++緙栧啓鐨勬湇鍔″櫒杈冨錛孏olang錛孞avaScript錛孋#鏄浜屾闃燂紝Skynet鐢變簬涓婃墜涓嶆槸寰堝鏄擄紝鎵浠ヤ粎鏈変袱浣嶆暟鐨勫洟闃熷湪浣跨敤錛屼絾鎬諱綋琛ㄧ幇榪樻槸姣旇緝鍑鴻壊鐨?
瀵逛簬鑰佸洟闃燂紝 C++鐨勬湇鍔″櫒宸ュ叿閾懼拰妗嗘灦宸茬粡鐩稿鎴愮啛錛?瀹屽叏娌″繀瑕佹洿鎹㈡柊璇█錛?鍙槸鍦ㄥ鎺dk鎰熻鍥伴毦鏃訛紝鍙互灝濊瘯Golang榪欎簺瀵箇eb鏈変紭鍔跨殑璇█榪涜娣峰悎璇█寮鍙?
瀵逛簬鏂板洟闃燂紝寮鍙戞晥鐜囷紝涓婃墜搴﹀拰閮ㄧ講鏁堢巼鏄紭鍏堥夋嫨鐨勶紝C#錛孏olang錛孞avaScript榪欎簺鏂板叴璇█浼氳浣犱簨鍗婂姛鍊?
瀵逛簬澶ц妯℃棤闇閫夋湇鐨勬湇鍔″櫒錛?Skynet鐨刟ctor妯″瀷瀵規墿灞曚細姣旇緝瀹規槗
瀵逛簬澶у叕鍙革紝濂介」鐩紝涓婄嚎鍚庨渶瑕侀氳繃鐑洿鏂拌繘琛宐ug淇ˉ鐨勶紝C#錛孋++錛孍rlang浼氭槸棣栭?
浣嗘葷殑涓鐐癸紝 榪樻槸鏍規嵁鍥㈤槦鐔熸倝搴︽潵閫夋嫨璇█錛岃錘鐒剁殑浣跨敤鏂拌璦鐨勯闄╀篃鏄緢澶х殑
鍩轟簬C/C++娓告垙鏈嶅姟鍣ㄦ鏋舵諱綋璁捐鐨勮繕鏄笉閿欑殑, 鍏勫紵浠諱綋浣跨敤鏁堟灉閮芥槸濂借瘎. 鍥犱負鍦ㄦ妧鏈笂鍠滄"鍋鋒噿", 鎵浠ュ湪寰堝璁捐涓? 閮芥槸鍔涙眰綆鍗? 楂樻晥(寮鍙戞晥鐜?.
鍩轟簬浠誨姟鐨勫紓姝B鏌ヨ緋葷粺, 甯﹀閲嶅紓姝ョ殑鍚屾
浠g爜紺轟緥:
1: 2: void BatchQueryPlayerInfo( uint32 ClientID, const std::string& AccountName, int64 CharID )
3: { 4: GDBExecutor->Commit 5: ( 6: dynamic_cast<DBDataTask*>( (new DBQueryCharInfo( ClientID, CharID ) )
7: ->LinkAtomTask( new DBQueryQuest( ClientID, CharID ) )
8: ->LinkAtomTask( new DBQuerySkill( ClientID, CharID ) )
9: ->LinkAtomTask( new DBQueryHero( ClientID, CharID ) )
10: ->LinkAtomTask( new DBQueryAccountInfo( ClientID, AccountName ) )
11: ->LinkAtomTask( new DBQueryEquip( ClientID, CharID ) )
12: ->LinkAtomTask( new DBQueryObject( ClientID ,CharID ) )
13: ->LinkAtomTask( new DBQueryLevel(ClientID, CharID))
14: ->LinkAtomTask( new DBQueryChapter(ClientID, CharID))
15: ->LinkAtomTask( new DBQueryActivity( ClientID, CharID ))
16: ) 17: ); 18: 19: }榪欐涓昏澶勭悊鐜╁鍦ㄧ櫥闄嗘椂, 闇瑕佷粠DB鏌ヨ澶ч噺鐨勪笉鍚屽垎綾葷殑鏁版嵁. 涓轟簡淇濊瘉鏁堢巼, 鎴戣姣忎釜Task騫惰鎵ц, 鐒跺悗閫氳繃涓涓満鍒? 璁╂墍鏈変換鍔″畬鎴愬悗, 鍥炶皟絎竴涓換鍔$殑涓涓嚱鏁? 榪欐牱灝辨棤闇鎵嬪姩瀹炵幇寰堝綺樺悎浠g爜, 閬垮厤浜嗗弽澶嶈皟璇曞拰閿欒
鍩轟簬protobuf鍙嶅皠鏈哄埗鐨勮鍙ヨ嚜鍔ㄥ悎鎴?/strong>
1: DBUpdateCharInfo::DBUpdateCharInfo( int64 CharID, const std::string& Buffer )
2: {3: char buffer[256];
4: 5: sprintf( buffer, "update tb_char set $FIELD$ where charid = %lld;", CharID );
6: 7: ExecuteCommand( buffer, Buffer, dbopr::FET_Equation ); 8: }榪欐灝辨槸涓涓吀鍨嬬殑DB浠誨姟, 鏋勯犲嚱鏁版彁渚涗簡CharID鍜屼竴涓敱緇撴瀯浣撳簭鍒楀寲濂界殑buffer, $FIELD$瀛楁, 鏄氳繃鍙嶅皠鏍規嵁Buffer鍐呭, 鑷姩濉厖瀛楁
榪欐渚嬪瓙涓? $FIELD$鍙互濉厖涓?hp=100, mp=100涔嬬被鐨? 鑷姩濉厖閬垮厤浜嗗洜涓烘坊鍔犲瓧孌電殑鍒板娣誨姞浠g爜, 榪橀渶瑕佽皟璇? 瀹規槗鎼為敊
閰嶇疆緋葷粺姒傚康
鍩轟簬鍚屼竴涓厤緗郴緇? 鍒嗗眰瀹炵幇涓嶅悓鐨勯渶姹? 鏇寸畝鍗曠殑璇? 瑙e喅鐨?涓疄闄呴棶棰樻槸:
鑷繁鏀逛簡閰嶇疆鏂囦歡涓殑ip, 涓婁紶svn鍚? 瑕嗙洊浜嗗埆浜虹殑閰嶇疆, 寰堝浜虹殑瑙e喅鏂規硶閮芥槸, 鏈湴閰嶇疆涓嶆彁浜? 浣嗗悓鏃墮棶棰樺張鏉ヤ簡:
褰撻厤緗腑鏈夊埆浜烘柊鍔犵殑緋葷粺閰嶇疆, 鎬庝箞淇濊瘉姣忎釜浜洪兘鑳芥洿鏂板埌?
涓婄嚎鍚? 鏈嶅姟鍣ㄤ氦浠樿繍緇? 浠栦滑浼氬閰嶇疆鏈変竴瀹氱▼搴︾殑淇敼, 榪欎釜鏃跺欐庝箞鍚堝茍紼嬪簭閰嶇疆鍜岃繍緇撮厤緗?
鍏跺疄瀵逛簬鍐茬獊鐨勯渶姹? 鍙瀵圭郴緇熻繘琛屽垎灞傚氨鍙互瑙e喅闂,鎴戠殑澶勭悊鏂瑰紡:
閰嶇疆鍒嗕負:
鍏ㄥ眬閰嶇疆: 鎵鏈夋湇鍔$殑鎬諱綋閰嶇疆
鍗曟湇鍔¢厤緗? 鏈湇鍔$殑閰嶇疆, 娑夊強緗戠粶鍙婇昏緫
鏈湴閰嶇疆: 榪欎釜閰嶇疆姣忎釜浜轟竴浠? 涓嶄笂浼燬VN
鍛戒護琛岄厤緗? 鏍煎紡鍜屽墠闈㈢殑涓鑷? 榪欏潡灝卞彲浠ラ氳繃榪愮淮榪涜閰嶇疆
鎬諱綋緇撴瀯鍏跺疄灝辨槸OO鐨勬淳鐢熸蹇? 涓嬪眰鍙互瑕嗙洊, 淇敼涓婂眰鐨勯厤緗?/p>
鏈嶅姟鍣ㄤ簰鑱斿強璇嗗埆妗嗘灦
鍩烘湰鍔熻兘: 鍩轟簬涓浜涚畝鍗曠殑閰嶇疆灝卞彲浠ュ皢澶氬彴鏈嶅姟鍣? 鍚岀綾葷殑涓嶅悓鏈嶅姟鍣ㄤ簰鐩歌繛鎺ヨ搗鏉? 鏂嚎鑷姩閲嶈繛.
鏈嶅姟鍣ㄨ繛鎺ュ悗, 鎵鏈夋湇鍔″櫒鍙煡鏅撳茍鍙嚜鍔ㄦ寜闇榪炴帴
閫昏緫绔篃寰堟柟渚跨殑榪涜騫挎挱鎴栬呭崟鐙彂閫佺瓑
涔熷氨鏄, 姣忎釜鏈嶅姟鍣ㄧ殑榪炴帴鍜屾帴鍙楃閮芥槸甯﹁瘑鍒悕縐版垨id鐨?
鍚庨潰瑙夊緱榪欏涓滆タ瀹炲湪鏄仛鐨勫鏉? 澶氭暣鍑轟竴鍙頒腑蹇冩湇鍔″櫒鏉ュ仛. 浣嗗ソ姝規鏋剁ǔ瀹氫笅鏉ヤ簡, 涔熷氨濂戒簡.
鍩轟簬lua鐨勬湇鍔″櫒web鍚庡彴妗嗘灦
鎬濇兂鏄緢涓嶉敊鐨? C++ 閰嶅悎lua鏈韓緇濆鏄釜澶辮觸
闂鍑哄湪web澶勭悊,鏈韓閮芥槸涓涓悓姝ラ樆濉炶繃紼? 鑰岃繖涓悗鍙版鏋舵槸寮傛鏂瑰紡鏉ュ仛, 鎵浠ョ壒鍒埆鎵?/p>
涓嶈繃姣旇搗浠ュ墠鐨勬湰鍦癎M緋葷粺, 榪欏潡鐨勮璁℃槸浼熷ぇ鐨勮繘姝?/p>
鐜板湪姝e湪璁捐鍩轟簬golang鐨勬湇鍔″櫒妗嗘灦, 鍩烘湰妗嗘灦宸茬粡瀹屽伐, 絳夊緟緙栧啓閫昏緫鍚庣殑瀹炴垬嫻嬭瘯
浠ヤ笂鐨勫緢澶氭濇兂鍦╣olang鐨勬湇鍔″櫒妗嗘灦閮芥湁鏀硅繘, 鐗瑰埆鏄痝olang鏈韓鍋歸eb涔熸槸浼樼鐨? 澶栧姞martini榪欑鐗沊妗嗘灦, 鏇存槸姘村埌娓犳垚
濡傛灉浣犲鏈嶅姟鍣ㄦ鏋惰璁℃湁鐗瑰埆鐨勮璇? 鎴栬呮兂紕版挒鎬濇兂, 鍙互鍔犲崥瀹㈢兢 309800774鎴栬呮垜鐨剄q: 20998333璁ㄨ
榪欐槸鐜頒粖鍦扮悆涓婅皟璇昹ua5.1鏈鏂逛究鐨勫伐鍏? 娌℃湁涔嬩竴. 寮哄ぇ鐨勬敞鍏ュ紡璋冭瘯, 鎬ц兘鏋侀珮.鏀寔 鎸傛帴榪涚▼, 鍙橀噺灞曞紑, 鏂偣絳夊悇縐嶆棩甯告墍闇.
鏃╂湡鐨凞ecoda鏄敹璐瑰伐鍏? 鍥犳璐ㄩ噺闈炲父楂?
Decoda鐜板湪宸茬粡鍋滄寮鍙戝茍寮婧愪簡, 璋冭瘯lua5.2浼歝rash. 婧愪唬鐮佸彲浠ヤ綔涓轟竴縐嶆妧鏈弬鑰? 寰堝dll娉ㄥ叆淇敼鎶鏈? 鐏板父鐗沊
姣旇緝浼樼鐨勮皟璇曞伐鍏?鍥犱負鏀惰垂), 鍙互璋冭瘯lua5.1/5.2, 鐣岄潰灞炰簬vs2008綾誨瀷, 鍦熻豹鍙互鑰冭檻涔板嚑濂楄瘯璇?/p>

瀵筶ua5.1鏀寔杈冨ソ, 5.2涔熻兘璋冧絾鍋跺皵榪樻槸浼歝rash, 鍩轟簬榪滅▼璋冭瘯鏂瑰紡, 鎵浠ユц兘鐣ヤ綆.
娌℃湁IDE, 綰懡浠よ鏂瑰紡璋冭瘯鍣? 浣嗗洜涓虹畝鍗? 鎵浠ュ彲浠ュ弬鑰冨悗鍐欎竴涓嚜宸辯殑紼嬪簭鍐呭緩璋冭瘯鍣?/p>
鎶婅繖璐ф斁鍦ㄦ渶鍚庢槸鏈夊師鍥犵殑, 榪樿寰楅偅鍙ヨ佽瘽: 鑰佸涓寮婧? 鎴戜滑灝辨湁鑷富鐮斿彂浜? 瀵圭殑, 榪欒揣涓瀹氭槸鍙傝冧簡Decoda鐨勪唬鐮佸悗鎼炲嚭涓獀s鐨勬彃浠舵潵, 铏界劧涓嶆敹璐? 浣嗘槸涓嶆彁涓嬪弬鑰冨璞$殑琛屼負榪樻槸鍊煎緱鎵規枟鐨? 榪欒揣鍦ㄤ腑鏂囧崥瀹笂璇? 涓嶆敮鎸佹寕鎺ュ埌榪涚▼(Decoda鏀寔), 涓嶆敮鎸?4浣嶈皟璇?LuaStudio鏀寔), 璋冭瘯30~50嬈″伓灝旀寕1鍒?嬈? 鍝? 姣曠珶鍙槸浠g爜鎼繍宸? 涓嶇敓浜т唬鐮?
榪欒揣瑁呬笂, 鑳界敤, 璋?.2鏄笉琛岀殑, 5.1姣擠ecoda鏂逛究鐐? 姣曠珶vs鏀寔鎮誕鏄劇ず鍙橀噺.
璇翠簡閭d箞澶? 鍏跺疄瀵逛簬lua5.2鐗堟湰鐨勮皟璇? 榪樻槸娌℃湁鍏嶈垂鐨勬瘮杈冨悎閫傜殑鏂規, 濡傛灉瀹炲湪鎯寵皟璇? 榪樻槸鍙互鍙傝冧笅RemDebug鐨勫師鐞嗗強lua瀹樻柟璋冭瘯鏂囨。, 鑷繁閫氳繃c api璋冪敤鍐欎竴濂楅傚悎鑷繁鐨勮繙紼嬭皟璇曞伐鍏? 鍏跺疄娌℃湁澶氬鏉? 浣嗘繪瘮涓嶈皟璇曠殑濂?img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-bottom-style: none; border-right-style: none; border-left-style: none" alt="寰瑧" src="http://m.shnenglu.com/images/cppblog_com/sunicdavy/Windows-Live-Writer/lua_D2A5/wlEmoticon-smile_2.png">
鐢變簬瑕佷嬌鐢╬rotoc-gen-lua, 榪欎笢瑗跨敓鎴愬嚭鏉ョ殑lua渚濈劧浣跨敤瀹樻柟鐨刴odule/package鏈哄埗. 瀵逛簬娓告垙欏圭洰鏉ヨ, 鎯寵繘琛屼竴浜涜嚜瀹氫箟璇誨彇, 鍔犲瘑絳? 灝卞彉寰椾笉鍙兘. 騫稿ソ瀹樻柟鍦ㄦ墿灞曚笂鏀寔鐨勮繕鏄笉閿欑殑.
鍙傝僱ua5.2鐨勫畼鏂規枃妗?a title="http://www.lua.org/manual/5.2/manual.html#pdf-require" >http://www.lua.org/manual/5.2/manual.html#pdf-require
require鏃? lua浼氳嚜鍔ㄦ牴鎹竴瀹氱殑鎼滅儲瑙勫緥鎵懼埌鍔犺澆浠g爜鐨勬柟娉? 榪欎釜鏂規硶瀹氫箟鍦?a name="pdf-package.searchers">package.searchers榪欎釜鏁扮粍涓? 涓鍏辨湁4涓姞杞芥悳绱㈤『搴?/p>
1. preload, 瀵瑰凡鍔犺澆鐨刴odule榪涜鐩存帴榪斿洖, 瀵瑰簲package.preload[modname]
2. lualoader, 瀵筶ua鏂囦歡榪涜鍔犺澆, 鎼滅儲璺緞涓?a >package.path
3. cloader, 瀵筶ua鏍囧噯dll榪涜鍔犺澆, 鎼滅儲璺緞涓?a >package.cpath
4. croot, 瀹樻柟鏂囨。璇寸殑鏄痑ll-in-one鍔犺澆鍣? 鎰熻寰堢濂? 鎰熷叴瓚e彲浠ヨ嚜琛屽弬鑰冩簮鐮?/p>
閭d箞, 濡傛灉鍙渶瑕佽嚜宸辯殑鍔犺澆鍣? 鍙渶瑕佽繖鏍峰仛:
package.searchers[2] = function( name )
print("try to load", name )
end
package.searchers[3] = nil
package.searchers[4] = nil
require "libtest"
鍙繚鐣檖reload鍔熻兘, 鐒跺悗灝嗙浜屼釜鍔犺澆鍣ㄦ崲鎴愯嚜宸辯殑鍔犺澆鍑芥暟, 絎笁,絎洓鐩存帴灞忚斀鐪媞t涓嬭澆欏?/a>鐨凲t鐨剋indows鐗堟湰榛樿鎻愪緵32浣嶅拰64浣? 閭d釜鍟pengl鐗堟殏鏃舵湭鐞嗕細
鍥犱負鏈漢緋葷粺鏄痺in7 64bit, 鍥犳姣棤鐞嗙敱鐨勪笅杞戒簡64浣嶇殑qt5.2鐗堟湰. 緙栬瘧浜唄ello world, 緇撴灉鎶ラ敊:
module machine type 'x64' conflicts with target machine type 'X86'
鎵句簡鍗婂ぉ娌℃煡鍒伴敊璇? 鍚庨潰娉ㄦ剰鍒皏s2012鐨勫伐紼嬬紪璇戠被鍨嬮夋嫨鐨勬槸win32 x86, 鎵嶆兂璧鋒槸鐢變簬qt5鐨勬墍鏈塴ib鏄?4浣嶇紪璇? 鑰屾垜浣跨敤32浣嶇殑紼嬪簭鍘婚摼鎺? 褰撶劧瑕佹姤閿?
閲嶆柊涓嬭澆32浣嶇殑qt5.2, 緙栬瘧姝g‘
鍙﹀涓涓敊璇篃鏄湪鍓嶉潰鐗堟湰鏋佷負灝戣鐨?
fatal error C1083: Cannot open include file: 鈥橤LES2/gl2.h鈥? No such file or directory
寰堝浜虹殑瑙e喅鏂規硶鏄寘鍚玅tANGLE涓嬬殑gles2鐩綍, 浣嗘槸鐢變簬鎴戠殑宸ョ▼鍐呯殑cocos2dx鏈韓涔熷甫鏈夎繖涓滆タ. 浜庢槸鐮旂┒浜嗕笅涓哄暐榪欑増鏈殑qt榛樿瑕佹悶鐨勯潪瑕佸拰gles鏈夊叧緋?
鏈緇? 鍙戠幇鍙互閫氳繃瀹氫箟QT_NO_OPENGL瀹忔潵灞忚斀opengl鐨勬覆鏌揂PI浣跨敤, 緙栬瘧閫氳繃
寰堟槸鎬蹇佃鍩轟簹鏃朵唬鐨剄t, 涓嬭澆,緙栬瘧涓姘斿懙鎴?/p>
TexturePacker鐨勮嚜瀹氫箟鎻掍歡鐩綍浣嶄簬鍏跺畨瑁呯洰褰曠殑bin\exporters\涓? 浣嗘湁涓浜涙彃浠跺睘浜庡唴寤烘敮鎸? 渚嬪cocos2dx鐨刾list鏍煎紡, 鍥犳鏃犳硶鎵懼埌瀵瑰簲鎻掍歡
鏈漢鍙傝僺hiva3d鎻掍歡, 瀵瑰簲瀵煎嚭鐣岄潰鐨凞ataFormat涓殑Shiva3D, 蹇熷浼氫簡濡備綍瀵煎嚭
瀹樻柟鏂囨。浣嶄簬http://www.codeandweb.com/texturepacker/documentation/#customization
鎻掍歡鐨勫熀鏈牸寮忓強鍘熺悊鏄?
bin\exporters\涓嬬殑鏌愪竴鐩綍涓嬪瓨鍦ㄧ殑涓涓悕涓篹xporter.xml鏂囦歡浣滀負鎻掍歡鐨勬弿榪?渚嬪:
<exporter version="1.0">
<!-- identifier of the exporter --><name>shiva3d</name>
<!-- display name of the exporter for the combo box --><displayName>Shiva3D</displayName>
<!-- description of the exporter --><description>Exporter for Shiva3D.</description>
<!-- exporter version --><version>1.0</version>
<!-- currently only one file allowed - more to come with update --><files>
<file>
<!-- name of this file variable --><name>xml</name>
<!-- human readable name (for GUI) --><displayName>XML</displayName>
<!-- file extension for the file --><fileExtension>xml</fileExtension>
<!-- name of the template file --><template>shiva.xml</template>
</file>
</files>
<!-- target framework supports trimming --><supportsTrimming>false</supportsTrimming>
<!-- target framework supports rotated sprites --><supportsRotation>true</supportsRotation>
<!-- rotated sprites direction (cw/ccw) --><rotationDirection>cw</rotationDirection>
<!-- supports npot sizes --><supportsNPOT>true</supportsNPOT>
<!-- supports file name stripping (remove .png etc) --><supportsTrimSpriteNames>yes</supportsTrimSpriteNames>
<!-- supports texure subpath --><supportsTextureSubPath>yes</supportsTextureSubPath>
</exporter>
鍦═emplate瀛楁涓? 鎻忚堪鍚岀洰褰曠殑瀵煎嚭鏂囦歡鏍煎紡妯℃澘. TexturePacker浣跨敤涓縐嶅彨Grantlee鐨勬ā鏉垮紩鎿?綾諱技浜嶱ython浣跨敤鐨凞jango妯℃澘寮曟搸, 鏂囨。鍙傝:Grantlee Documentation. 綆鍗曠殑鏂囨湰鏍煎紡鍙互鍙傝僺hiva.xml蹇熷浼?/p>
榪欓噷鎴戜滑浣跨敤protobuf鐨勬枃鏈牸寮?鏋佷負綾諱技json)瀵煎嚭plist, 涓嬮潰鏄鍑烘ā鏉?/p>
{% for sprite in allSprites %}Sprite { Name: "{{sprite.trimmedName}}" FrameX: {{sprite.frameRect.x}} FrameY: {{sprite.frameRect.y}} FrameWidth: {{sprite.frameRectWithoutRotation.width}} FrameHeight: {{sprite.frameRectWithoutRotation.height}} OffsetX: {{sprite.cornerOffset.x}} OffsetY: {{sprite.cornerOffset.y}} OriginalWidth: {{sprite.untrimmedSize.width}} OriginalHeight: {{sprite.untrimmedSize.height}} {% if sprite.rotated %}Rotated: true {% endif %}}
{% endfor %}瀵煎嚭鐨勭粨鏋滅被浼間簬:
Sprite { Name: "car01"FrameX: 100
FrameY: 129
FrameWidth: 76
FrameHeight: 47
OffsetX: 0
OffsetY: 0
OriginalWidth: 76
OriginalHeight: 47
Rotated: true }
Sprite { Name: "car02"FrameX: 100
FrameY: 51
FrameWidth: 76
FrameHeight: 47
OffsetX: 0
OffsetY: 0
OriginalWidth: 76
OriginalHeight: 47
Rotated: true }
...
瀵煎嚭鎻掍歡榪樻敮鎸乯s鎵╁睍, 鍏蜂綋鍐呭璇風戶緇弬鑰冨畼鏂規枃妗? 浣嗗浜庣畝鍗曠殑鏂囨湰鏍煎紡, 榪欑鏂瑰紡宸茬粡瓚沖浜?/p>
瀵規瘮plist鍚? 鍙戠幇plist涓殑鍨冨溇淇℃伅鏋佷負澶? 鑰屼笖浣滀負spriteframe鐨刵ame灞呯劧甯︽湁鎵╁睍鍚?.. 鍥犳鑴辯plist,緙栧啓鑷繁鐨勫鍑烘彃浠舵墠鏄帇閬?
2. Qt鐨勬灦鏋勬槑鏄炬槸緇忚繃綺懼績璁捐鐨勯潰鍚戝璞$殑銆俀t鍥犳鍦ㄥ懡鍚嶏紝緇ф壙錛岀被鐨勭粍緇囩瓑鏂歸潰淇濇寔浜嗕紭縐鐨勪竴鑷存с備綘鍙渶瑕佹彁渚涘敮涓涓涓柟娉曠殑鍙傛暟錛屼粎姝や竴涓傚湪涓嶅悓鐨勭被涓皟鐢ㄦ柟寮忎篃鏄湁寰堝己鐨勮繛璐с傝繑鍥炲間篃寰堟湁閫昏緫鎬с傛墍鏈変竴鍒囪揪鍒頒簡綆鍗曞拰寮哄ぇ鐨勫拰璋愮粺涓銆備竴鏃︿綘浣跨敤浜嗗叾涓竴涓被錛屽叾浠栫殑綾諱篃灝辮Е綾繪梺閫氾紝鍥犱負浠栦滑鏄竴鑷寸殑銆?
3. Qt涓嶅己鍒朵嬌鐢ㄤ換浣曡璁℃ā寮忋傚鏋滀綘璁や負鎭板綋錛屼嬌鐢―ocument/view娌℃湁浠諱綍闂銆備笉浣跨敤涔熸病鏈変換浣曢棶棰樸?
4. MFC鏄簨浠墮┍鍔ㄧ殑鏋舵瀯銆傝鎵ц浠諱綍鎿嶄綔錛岄兘蹇呴』鏄鐗瑰畾鐨勬秷鎭綔鍑哄搷搴斻俉indows瀵瑰簲鐢ㄧ▼搴忓彂閫佺殑淇℃伅鏁頒互鍗冭錛岄仐鎲劇殑鏄紝瑕佸垎娓呮榪欎簺鍒嗙箒鑺滄潅鐨勬秷鎭槸寰堝洶闅劇殑錛屽茍涓斿叧浜庤繖鏂歸潰鐨勬枃。迤堜笉鑳藉緢濂界殑瑙e唽櫩欎簺闂銆?br>Qt鐨勬秷鎭満鍒舵槸寤虹珛鍦⊿IGNAL()鍙戦佸拰SLOT()鎺ュ彈鐨勫熀紜涓婄殑銆傝繖涓満鍒舵槸瀵硅薄闂村緩绔嬭仈緋葷殑鏍稿績鏈哄埗銆傚埄鐢⊿IGNAL()鍙互浼犻掍換浣曠殑鍙傛暟銆備粬鐨勫姛鑳介潪甯哥殑寮哄ぇ銆傚彲浠ョ洿鎺ュぇ浼犻掍俊鍙風粰SLOT()錛屽洜姝ゅ彲浠ユ竻妤氱殑鐞嗚В瑕佸彂鐢熺殑浜嬫儏銆備竴涓被鎵鍙戦佺殑淇″彿鐨勬暟閲忛氬父闈炲父鐨勫皬(4鎴栬?)錛屽茍涓旀枃妗d篃闈炲父鐨勯綈鍏ㄣ傝繖璁╀綘鎰熻鍒頒竴鍒囧敖鍦ㄦ帉鎻′箣涓係IGNAL/SLOT鏈哄埗綾諱技浜嶫ava涓璴istener鏈哄埗,涓嶈繃榪欑鏈哄埗鏇村姞杞婚噺綰э紝鍔熻兘鏇撮綈鍏ㄣ?
5. Qt鎷ユ湁闈炲父綆鍗曡屽張涓嶅け寮哄ぇ鐨刲ayout鏈哄埗錛屽竷灞鐏墊椿澶氬彉
Qt榪樻彁渚涗簡涓涓浘褰㈢敤鎴峰伐鍏鳳紝Qt Designer錛屽彲浠ョ敤鏉ュ府鍔╁緩绔嬬敤鎴風晫闈€傚彲浠ヤ慨鏀規墍浣跨敤鐨勪換浣曟帶浠剁殑灞炴с備笉鐢ㄥ皢浠栦滑鏀懼湪涓ユ牸鐨勪綅緗紝鍙互閫氳繃layout瀹岀編鐨勭粍緇囦粬浠傝繖涓伐鍏鋒墍浜х敓鐨勪唬鐮佹垜浠槸鍙互瀹為檯涓婇槄璇誨茍涓斿彲浠ョ悊瑙g殑銆傜敓鎴愮殑浠g爜鍗曠嫭鏀懼湪涓涓枃浠墮噷錛屽湪緙栫▼鐨勫悓鏃訛紝浣犲彲浠ラ殢蹇冩墍嬈茬殑澶氭閲嶆柊鐢熸垚鐢ㄦ埛鐣岄潰銆?br>Qt Designer鍙互璁╀綘瀹屾垚璁稿鍦∕FC涓笉鍙兘瀹屾垚鐨勪換鍔★紝姣斿鐢ㄩ鍏堝~濂界殑鐢熸垚listview錛屽湪姣忎釜tab涓婄敤涓嶅悓鐨剉iew鏉ヤ嬌鐢╰ab 鎺у埗銆?
6. 浣跨敤MFC錛屼竴閮ㄥ垎寮鍙戣繃紼嬭渚濋潬鈥渞esources鈥?鍦ㄥ緢澶氱殑妗堜緥涓紑鍙戣呭繀欏諱嬌鐢ㄤ粬浠傝繖鏍蜂細瀵艱嚧濡備笅鐨勫悗鏋滐細鍑轟簡Visual Studio錛屼綘寰堥毦浣跨敤鍏朵粬鐨勫伐鍏鋒潵瀹屾垚寮鍙戙?br>璧勬簮緙栬緫鍣ㄤ粎鏈夋湁闄愮殑鍔熻兘錛屾瘮濡傦細閫氳繃Dialog緙栬緫鍣ㄤ笉鍙兘鏀瑰彉鎵鏈夌殑灞炴э紝涓浜涘睘鎬у彲浠ユ敼鍙橈紝鍙︿竴浜涘睘鎬у垯涓嶅彲鑳芥敼鍙樸?璇戣呮敞錛氫笅闈㈣繕鏈変袱鏉¢檲榪癕FC緙虹偣鐨勫疄渚嬶紝浣嗘垜鎰熻榪欎簺宸茬粡澶熻鏄庨棶棰樹簡錛屾殏鏃跺垹鑺備笉璇?
鐒惰孮t騫舵病鏈夎祫婧愮殑姒傚康錛岃繖灝辮В鍐充簡浠ヤ笂鎵鎻愬埌鐨勯棶棰樸俀t鎻愪緵浜嗕竴涓剼鏈嬌寰楄兘灝嗙紪鍏ヤ綘鐨勪唬鐮併傚浜庣晫闈㈣璁★紝Qt Designer鍒欏垱寤轟簡鍙鐨勪唬鐮併?
7. Qt鐨勬枃妗e畬澶囦笖璇︾粏鐨勮鐩栦簡Qt鐨勬柟鏂歸潰闈紝绔熺劧浠呮湁18M銆傛瘡涓涓被鍜屾柟娉曢兘琚灝芥弿榪幫紝宸ㄧ粏闈¢仐錛屼婦渚嬪厖瀹炪傞氳繃Trolltech鍏徃鎻愪緵鐨勯摼鎺ユ垨鑰呮槸Qt Assistant宸ュ叿錛屽彲浠ユ柟渚跨殑浠庝竴涓被鎴栬呮柟娉曡煩杞埌鍏朵粬鐨勭被銆傛枃。杩樺寘鍚簡涓涓垵瀛﹁呮暀紼嬪拰涓浜涘吀鍨嬪簲鐢ㄧ殑渚嬪瓙
8. 鍦ㄥ彂甯冨熀浜嶮FC鐨勮蔣浠舵椂錛屽繀欏諱緷闈犲瓨鍦ㄤ簬瀹㈡埛鐢佃剳涓婄殑MFC銆備絾鏄繖鏄笉瀹夊叏鐨勶紝鍚屾牱鏄疢FC42.dll錛屽彲浠ュ熀浜庣浉鍚岀殑搴撳緱鍒?涓笉鍚岀殑鐗堟湰銆傞氬父錛岄渶瑕佹鏌ユ槸鍚︽嫢鏈夋紜殑MFC42.dll鐗堟湰錛屽鏋滀笉鏄紝灝卞崌綰у畠銆備絾鏄崌綰FC42.dll浼氭敼鍙樺緢澶氳蔣浠剁殑琛屼負銆?br>Qt鍒欐病鏈夎繖涓闄╋紝鍥犱負Qt鍘嬫牴灝辨病鏈夆滃崌綰ф暣涓郴緇熲濊繖涓蹇點?
9. Qt 瀹屽叏鏀寔CSS2錛岃繖浣垮緱Qt搴旂敤紼嬪簭錛屾棤璁烘槸緹庡寲榪樻槸鎹㈣偆錛屽疄鐜拌搗鏉ラ兘鐩稿綋綆鍗?
10. Qt鑷甫緲昏瘧鍣紝鍙互闅忔剰鍒囨崲杞歡璇█
鍦ㄤ嬌鐢≦t鍔ㄦ侀摼鎺ュ簱鐨勬儏鍐典笅錛屾牴鎹甃GPL鍗忚瑙勫畾錛屾槸鍙互闂簮鍙戝竷浠諱綍褰㈠紡鐨勭▼搴忕殑銆?
鍙傝冮摼鎺ワ細
鏉ヨ嚜Qt瀹樻柟璁哄潧鐨勮璁猴細http://qt-project.org/forums/viewthread/2428
鍗氬閾炬帴錛?a >http://devbean.blog.51cto.com/448512/313477
杞嚜:http://blog.csdn.net/superzhaifd/article/details/18224923 緲熷啲鐙糭Trump
鏈漢杈冨枩嬈㈢浜岀偣: 涓嶄嬌鐢ㄤ換浣曡璁℃ā寮忔瀯寤哄簳灞? 璁捐妯″紡鍙槸鎬濇兂, 涔熸槸緹佺粖. 澶ч噺浣跨敤鍙細璁╃郴緇熻噧鑲?
鏈榪戝噯澶囧湪鎵嬫満欏圭洰瀹㈡埛绔腑浣跨敤lua, 浠ュ墠涓鐩村湪鏈嶅姟鍣ㄤ嬌鐢╨uabind. 鍙﹀, tolua++涔熶綋楠岃繃, LuaPlus涔熷湪鏃╁勾鐢ㄨ繃. 浠ヤ笅鏄湰浜哄榪欎簺緇戝畾搴撶殑涓漢鎰熻:
luabind
鍒╃敤boost鏈哄埗鎶婄粦瀹氬仛鍒版瀬鑷? 姣旇緝閫傚悎涓籧++, 寮眑ua鐨勮剼鏈鏋?
浣滆呭凡緇忓仠姝㈡洿鏂? 鍦╳indows/linux緙栬瘧娌¢棶棰? 浣嗘槸鍦╥os鐨凩LVM涓? 鏃犳硶緙栬瘧
tolua++
鍍廲ocos2dx浣跨敤tolua++涔熸槸鍙互鐞嗚В鐨? 閭d箞澶氬嚱鏁伴渶瑕佺粦瀹? tolua++鐨勫ご鏂囦歡parse鍙婅嚜鍔ㄤ唬鐮佺敓鎴愯妭綰︿簡寰堝鎵嬪姩緇戝畾鐨勬椂闂?
浣嗘槸鐪嬪埌浠g爜涓湁涓閮ㄥ垎bugfix灝卞績瀛樹笉瀹?綰釜浜烘劅瑙? 鏈漢浣跨敤涓嶅, 嬈㈣繋鐮栧ご浼哄?,鍙﹀, tolua++鍙兘鐢辮剼鏈眰椹卞姩C++, 鑰屾病鏈夊皢宸茬粡瀹炰緥鍖栫殑鍙ユ焺娉ㄥ唽鍒發ua鐨勫姛鑳戒篃鏄厼絎斿晩
LuaPlus
鎺ュ彛杈冧負綆鍗? 閫備簬鍒濆鑰呬笂鎵? 鏃犱換浣曠殑妯℃澘, 鎬ц兘涓嶉珮
luaBridge
欏圭洰鍦板潃: https://github.com/vinniefalco/LuaBridge
鎵嬪唽: http://vinniefalco.com/LuaBridge/Manual.html
綰ご鏂囦歡瀹炵幇, 鏃犻渶緙栬瘧, 鍖呭惈榪涘叆宸ョ▼鍗沖彲, 鎺ュ彛綆媧侀珮鏁?/p>
鐩告瘮luabind, 鍞竴涓嶈兘瀹炵幇鐨勫父鐢ㄥ姛鑳藉氨鏄灇涓? 浣嗘槸鍙互鏀寔綾繪垚鍛橀潤鎬佸彉閲忔敞鍐? 榪欎釜灝辨棤鎵璋撲簡, 鎵嬪啓涓涓灇涓炬敮鎸佷篃寰堢畝鍗?/p>
鐪嬩笅婕旂ず浠g爜:
class A { public: A( ) { } virtual void foo( int a ) { printf("foo base\n"); } std::string Member; }; class B : public A { public: virtual void foo( int a ) { printf("foo inherited\n"); } };
void foo( int b ) { }
luabridge::getGlobalNamespace(L)
.beginClass<A>("Sobj")
.addConstructor<void (*) (void)> ()
.addFunction("foo", &A::foo)
.addData("Member",&A::Member)
.endClass()
.deriveClass<B, A>("SSec")
.addFunction("foo",&B::foo )
.endClass();
luabridge::getGlobalNamespace(L).addFunction("foo", foo );
B ins;
ins.Member = "data";
luabridge::setGlobal(L, ins, "ins");
lua渚х殑浠g爜
local a = Sobj()
a:foo(2)
a.Member = "hello"
ins:foo(3)
error: missing binary operator before token "("
鏍規嵁鑰佸鐨勬弿榪? boost涓殑BOOST_PP_ITERATION_FLAGS浠?.49鐗堟湰鍚庡彂鐢熶簡涓浜涘彉鍖?
鍦╣it鎵懼埌涓涓猵atch, 閾炬帴鍦ㄦ
浠ヤ笅綆鍗曟弿榪?/p>
淇敼call_function.hpp, call_member.hpp鍙妛rapper_base.hpp
鍘繪帀#elif BOOST_PP_ITERATION_FLAGS() == 1
鏇存崲涓?/p>
#else
#if BOOST_PP_ITERATION_FLAGS() == 1
鐒跺悗鍦ㄦ簮鐮佸簳閮ㄥ姞涓涓?endif鍗沖彲
鍦ㄥ惎鍔ㄥ墠, 娣誨姞濡備笅浠g爜:
QApplication qapp(argc, argv);
qapp.addLibraryPath(QCoreApplication::applicationDirPath()+"/plugins");
灝哘T寮鍙戠洰褰曚笅: Qt\4.8.2\plugins\鎷瘋礉鍒癚t鐨別xe鐩綍鍗沖彲
cygwin鍙傝冭繖閲?
http://my.oschina.net/tonywolf/blog/49214
綆鍗曠殑璇?
1.涓嬭澆cygwin鐨勭綉緇滃畨瑁呭寘(絎竴嬈″畨瑁呭彧鑳借繖鏍?
2. 閫夋嫨闈犲墠涓鐐圭殑緗戠珯榪涜涓嬭澆( 涓嬪ソ鐨勫寘鍙互鐣欑潃, 涓嬫瀹夎鐩存帴浠庢枃浠跺す涓夋嫨灝卞彲浠ュ畨瑁?
cygwin涓嬩嬌鐢∟DK緙栬瘧boost鍙傝冭繖閲?
http://blog.sina.com.cn/s/blog_a6946c8a01016aot.html
緇嗚妭娉ㄦ剰:
1. boost瀹樼綉涓嬭澆boost_1_53_0.tar.bz2, 瑙e帇鏀懼湪android-ndk-r8e/sources涓?
2. 鐢熸垚boost緙栬瘧宸ュ叿: 鍦╞oost鐩綍涓嬭繍琛?./bootstrap.sh 鎴栬?bootstrap.bat 鐢熸垚 b2
3. 淇敼 boost/tools/build/v2/user-config.jam 鍐呭淇敼濡備笅
import os ;
if [ os.name ] = CYGWIN || [ os.name ] = NT {androidPlatform = windows ;
}
else if [ os.name ] = LINUX {
androidPlatform = linux-x86_64 ;
}
else if [ os.name ] = MACOSX {
androidPlatform = darwin-x86 ;
}
modules.poke : NO_BZIP2 : 1 ;
ANDROID_NDK = ../.. ;
using gcc : android4.6 : $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-g++ :
<archiver>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ar
<ranlib>$(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.6/prebuilt/$(androidPlatform)/bin/arm-linux-androideabi-ranlib
<compileflags>--sysroot=$(ANDROID_NDK)/platforms/android-9/arch-arm
<compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/include
<compileflags>-I$(ANDROID_NDK)/sources/cxx-stl/gnu-libstdc++/4.6/libs/armeabi/include
<compileflags>-DNDEBUG
<compileflags>-D__GLIBC__
<compileflags>-DBOOST_FILESYSTEM_VERSION=3
<compileflags>-lstdc++
<compileflags>-lgnustl_shared
<compileflags>-mthumb
<compileflags>-fno-strict-aliasing
<compileflags>-std=gnu++11
<compileflags>-O2
;
4. 涓轟簡瀹夊叏璧瘋, 鎴戞墦浜嗕釜BoostForAndriod涓婄殑琛ヤ竵: 鎵嬪姩淇敼涓嬪氨濂戒簡
diff -ruN boost_1_53_0-boot/boost/asio/detail/socket_types.hpp boost_1_53_0-patched/boost/asio/detail/socket_types.hpp
--- boost_1_53_0-boot/boost/asio/detail/socket_types.hpp 2012-01-15 14:46:25.000000000 +0100
+++ boost_1_53_0-patched/boost/asio/detail/socket_types.hpp 2012-06-27 19:19:01.279562338 +0200
@@ -123,7 +123,12 @@
typedef int socket_type;
const int invalid_socket = -1;
const int socket_error_retval = -1;
+// @Moss - Some platforms do not define it (Android)
+#if defined(INET_ADDRSTRLEN)const int max_addr_v4_str_len = INET_ADDRSTRLEN;
+#else // defined(INET_ADDRSTRLEN)+const int max_addr_v4_str_len = 16;
+#endif // defined(INET_ADDRSTRLEN)#if defined(INET6_ADDRSTRLEN)const int max_addr_v6_str_len = INET6_ADDRSTRLEN + 1 + IF_NAMESIZE;
#else // defined(INET6_ADDRSTRLEN)diff -ruN boost_1_53_0-boot/boost/asio/ip/impl/address_v6.ipp boost_1_53_0-patched/boost/asio/ip/impl/address_v6.ipp
--- boost_1_53_0-boot/boost/asio/ip/impl/address_v6.ipp 2012-01-15 14:46:25.000000000 +0100
+++ boost_1_53_0-patched/boost/asio/ip/impl/address_v6.ipp 2012-06-27 19:19:11.029581297 +0200
@@ -11,6 +11,23 @@
#ifndef BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP#define BOOST_ASIO_IP_IMPL_ADDRESS_V6_IPP+// @Moss - Define IPv6 macros
+#if !defined(IN6_IS_ADDR_MULTICAST) +#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)+#endif+
+#if !defined(IN6_IS_ADDR_MC_NODELOCAL)+#define IN6_IS_ADDR_MC_NODELOCAL(a) \+ (IN6_IS_ADDR_MULTICAST(a) \
+ && ((((__const uint8_t *) (a))[1] & 0xf) == 0x1))
+#endif+
+#if !defined(IN6_IS_ADDR_MC_GLOBAL)+#define IN6_IS_ADDR_MC_GLOBAL(a) \+ (IN6_IS_ADDR_MULTICAST(a) \
+ && ((((__const uint8_t *) (a))[1] & 0xf) == 0xe))
+#endif+
#if defined(_MSC_VER) && (_MSC_VER >= 1200)# pragma once#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)diff -ruN boost_1_53_0-boot/boost/config/user.hpp boost_1_53_0-patched/boost/config/user.hpp
--- boost_1_53_0-boot/boost/config/user.hpp 2004-01-10 13:10:00.000000000 +0100
+++ boost_1_53_0-patched/boost/config/user.hpp 2012-06-27 19:18:46.129532736 +0200
@@ -13,6 +13,15 @@
// configuration policy:
//
+// Android defines
+#define __arm__ 1+#define _REENTRANT 1+#define _GLIBCXX__PTHREADS 1+// There is problem with std::atomic on android (and some other platforms).
+// See this link for more info:+// https://code.google.com/p/android/issues/detail?id=42735#makechanges+#define BOOST_ASIO_DISABLE_STD_ATOMIC 1+
// define this to locate a compiler config file:
// #define BOOST_COMPILER_CONFIG <myheader>diff -ruN boost_1_53_0-boot/boost/detail/endian.hpp boost_1_53_0-patched/boost/detail/endian.hpp
--- boost_1_53_0-boot/boost/detail/endian.hpp 2011-03-29 23:58:48.000000000 +0200
+++ boost_1_53_0-patched/boost/detail/endian.hpp 2012-06-27 19:18:39.359519453 +0200
@@ -31,7 +31,7 @@
// GNU libc offers the helpful header <endian.h> which defines
// __BYTE_ORDER
-#if defined (__GLIBC__)+#if defined (__GLIBC__) || defined(ANDROID)# include <endian.h># if (__BYTE_ORDER == __LITTLE_ENDIAN)# define BOOST_LITTLE_ENDIANdiff -ruN boost_1_53_0-boot/boost/interprocess/detail/workaround.hpp boost_1_53_0-patched/boost/interprocess/detail/workaround.hpp
--- boost_1_53_0-boot/boost/interprocess/detail/workaround.hpp 2011-12-26 18:21:36.000000000 +0100
+++ boost_1_53_0-patched/boost/interprocess/detail/workaround.hpp 2012-06-27 19:18:52.909546004 +0200
@@ -54,7 +54,7 @@
#endif//Check for XSI shared memory objects. They are available in nearly all UNIX platforms
- #if !defined(__QNXNTO__)+ #if !defined(__QNXNTO__) && !defined(ANDROID) #define BOOST_INTERPROCESS_XSI_SHARED_MEMORY_OBJECTS #endifdiff -ruN boost_1_53_0-boot/libs/filesystem/src/operations.cpp boost_1_53_0-patched/libs/filesystem/src/operations.cpp
--- boost_1_53_0-boot/libs/filesystem/src/operations.cpp 2012-01-28 15:40:16.000000000 +0100
+++ boost_1_53_0-patched/libs/filesystem/src/operations.cpp 2012-06-27 19:19:19.269597266 +0200
@@ -73,13 +73,15 @@
const fs::path dot_dot_path("..");# include <sys/types.h># include <sys/stat.h>-# if !defined(__APPLE__) && !defined(__OpenBSD__)+# if !defined(__APPLE__) && !defined(__OpenBSD__) && !defined(__ANDROID__) && !defined(ANDROID)# include <sys/statvfs.h># define BOOST_STATVFS statvfs# define BOOST_STATVFS_F_FRSIZE vfs.f_frsize# else# ifdef __OpenBSD__# include <sys/param.h>+# elif defined(__ANDROID__) || defined(ANDROID) // @Moss - Android messes up a bit with some headers, this one is the correct one :D+# include <sys/vfs.h># endif# include <sys/mount.h># define BOOST_STATVFS statfs@@ -206,7 +208,19 @@
|| ::mkdir(to.c_str(),from_stat.st_mode)!= 0))
# define BOOST_COPY_FILE(F,T,FailIfExistsBool)copy_file_api(F, T, FailIfExistsBool)# define BOOST_MOVE_FILE(OLD,NEW)(::rename(OLD, NEW)== 0)+#if defined(__ANDROID__) || defined(ANDROID)+ int BOOST_RESIZE_FILE(const char *path, off_t size)
+ {+ int result = -1;
+ int fd = open(path, O_WRONLY);
+ if (fd != -1)+ result = ftruncate(fd, size);
+ close(fd);
+ return result;+ }
+#else# define BOOST_RESIZE_FILE(P,SZ)(::truncate(P, SZ)== 0)+#endif# define BOOST_ERROR_NOT_SUPPORTED ENOSYS# define BOOST_ERROR_ALREADY_EXISTS EEXIST
5. 鍛戒護琛岀紪璇?
./b2 --without-python --without-mpi --without-serialization toolset=gcc-android4.6 link=static runtime-link=static target-os=linux --stagedir=android
浣跨敤緙栬瘧瀹屾垚鐨刡oost搴?
1. 灝嗙紪璇慴oost_1_53_0\android\lib\ 涓嬬殑.a搴?鍙奲oost_1_53_0\boost\涓嬬殑澶存枃浠舵嫹璐濆嚭鏉ユ斁鍦ㄥ伐紼嬬殑boost4android鐩綍涓?
2. 鍦╞oost4android鐩綍涓?鍒涘緩Android.mk, 鍐呭濡備笅
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_atomic
LOCAL_SRC_FILES:= lib/libboost_atomic.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_chrono
LOCAL_SRC_FILES:= lib/libboost_chrono.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_context
LOCAL_SRC_FILES:= lib/libboost_context.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_date_time
LOCAL_SRC_FILES:= lib/libboost_date_time.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_exception
LOCAL_SRC_FILES:= lib/libboost_exception.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_filesystem
LOCAL_SRC_FILES:= lib/libboost_filesystem.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_graph
LOCAL_SRC_FILES:= lib/libboost_graph.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_iostreams
LOCAL_SRC_FILES:= lib/libboost_iostreams.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_c99
LOCAL_SRC_FILES:= lib/libboost_math_c99.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_c99f
LOCAL_SRC_FILES:= lib/libboost_math_c99f.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_c99l
LOCAL_SRC_FILES:= lib/libboost_math_c99l.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_tr1
LOCAL_SRC_FILES:= lib/libboost_math_tr1.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_tr1f
LOCAL_SRC_FILES:= lib/libboost_math_tr1f.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_math_tr1l
LOCAL_SRC_FILES:= lib/libboost_math_tr1l.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_program_options
LOCAL_SRC_FILES:= lib/libboost_program_options.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_random
LOCAL_SRC_FILES:= lib/libboost_random.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_regex
LOCAL_SRC_FILES:= lib/libboost_regex.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_system
LOCAL_SRC_FILES:= lib/libboost_system.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_thread
LOCAL_SRC_FILES:= lib/libboost_thread.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= boost_timer
LOCAL_SRC_FILES:= lib/libboost_timer.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)
include $(PREBUILT_STATIC_LIBRARY)
LOCAL_WHOLE_STATIC_LIBRARIES += boost_system
LOCAL_WHOLE_STATIC_LIBRARIES += boost_filesystem
LOCAL_WHOLE_STATIC_LIBRARIES += boost_thread
鐢ㄥ灝? 鍖呭灝?/p>
娣誨姞寮傚父鏀寔 LOCAL_CPPFLAGS += 鈥揻exceptions
娣誨姞妯″潡寮曠敤
$(call import-module,boost4android)
鏂囨湰鏍煎紡鐨勮В鏋愰敊璇笉鑳戒嬌鐢ㄦ崟鑾烽敊璇潵鑾峰彇, 鍥犳,鎴戜滑闇瑕佷嬌鐢ㄨ嚜瀹氫箟鐨勯敊璇敹闆嗗櫒榪涜鏀墮泦, 鐪嬩唬鐮?
#include <google/protobuf/text_format.h>
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include <google/protobuf/io/tokenizer.h>
class PBTextErrorCollector : public google::protobuf::io::ErrorCollector
{public:PBTextErrorCollector( const std::string& FileName )
: mFileName( FileName )
{}
virtual void AddError(int line, int column, const string& message)
{ CCLog("%s(%d:%d) %s ", mFileName.c_str(), line, column, message.c_str() );}
virtual void AddWarning(int line, int column, const string& message)
{ CCLog("%s(%d:%d) %s ", mFileName.c_str(), line, column, message.c_str() );}
private: std::string mFileName;};
瑙f瀽浠g爜
google::protobuf::TextFormat::Parser P;
P.RecordErrorsTo( &PEC );
P.Parse( &AIS, &AF );
鍙﹀: 鏂囨湰鏍煎紡鐨勬敞閲婁嬌鐢╱nix shell椋庢牸: 浠?寮澶?/p>
涓嬮潰鏄垜鐨勬枃鏈牸寮忕殑閰嶇疆鏂囦歡
AnchorPointX: 0.5 AnchorPointY: 0 SpriteScale: 2 ComponentName: "ActorActionManager" ComponentName: "ActorFrameEventDispatcher" #ComponentName: "SoundFXController" ComponentName: "RoleDeltaMoveController" ComponentName: "RoleBehaviorDirector" InitAction: AA_Idle Animations { AnimationName: "mai_idle" AnimationInterval: 0.067 }
鍦ㄤ綘鐨凙ndroid.mk鏂囦歡涓坊鍔?LOCAL_CPPFLAGS += -std=gnu++0x鍗沖彲
pdb鍔犺澆鏄甯哥殑, 浣嗘槸鍫嗘爤娌℃樉紺哄姝ょ畝鍗曠殑絀烘寚閽堣闂綅緗? Google浜嗕互涓?/p>
瑙e喅鏂規硶: Debug->Exception涓皢鎵鏈夊紓甯稿嬀閫夊嵆鍙?/p>
涓嶇煡閬撳摢閲岀殑璁劇疆瀵艱嚧濡傛璇″紓鐨勯棶棰? 瀹崇殑鎴戦噸瑁呬竴嬈?.
ProjectName\
src\
core\
share\
proj.android\
jni\
鈥?/p>
sdk\
protobuf-2.4.1\
src\
鈥?/p>
浠嶨oogle code涓嬭澆protobuf-2.4.1婧愮爜鍖? 瑙e帇, 鍦╬rotobuf-2.4.1鐩綍涓嬫坊鍔燗ndroid.mk, 鍐呭濡備笅
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := protobuf-2.4.1
LOCAL_SRC_FILES := \
src/google/protobuf/io/coded_stream.cc \src/google/protobuf/io/printer.cc \src/google/protobuf/io/gzip_stream.cc \src/google/protobuf/io/tokenizer.cc \src/google/protobuf/io/zero_copy_stream.cc \src/google/protobuf/io/zero_copy_stream_impl.cc \src/google/protobuf/io/zero_copy_stream_impl_lite.cc \src/google/protobuf/stubs/common.cc \src/google/protobuf/stubs/once.cc \src/google/protobuf/stubs/structurally_valid.cc \src/google/protobuf/stubs/strutil.cc \src/google/protobuf/stubs/substitute.cc \src/google/protobuf/compiler/importer.cc \src/google/protobuf/compiler/parser.cc \src/google/protobuf/descriptor.cc \src/google/protobuf/descriptor.pb.cc \
src/google/protobuf/descriptor_database.cc \src/google/protobuf/dynamic_message.cc \src/google/protobuf/extension_set.cc \src/google/protobuf/extension_set_heavy.cc \src/google/protobuf/generated_message_reflection.cc \src/google/protobuf/generated_message_util.cc \src/google/protobuf/message.cc \src/google/protobuf/message_lite.cc \src/google/protobuf/reflection_ops.cc \src/google/protobuf/repeated_field.cc \src/google/protobuf/service.cc \src/google/protobuf/text_format.cc \src/google/protobuf/unknown_field_set.cc \src/google/protobuf/wire_format.cc \src/google/protobuf/wire_format_lite.cc \LOCAL_C_INCLUDES := $(LOCAL_PATH) \
$(LOCAL_PATH)/src
include $(BUILD_STATIC_LIBRARY)
姝ゆ椂緙栬瘧浼氭姤config.h鎵句笉鍒扮殑閿欒, 榪欎釜鏂囦歡鍦╲sproject鐩綍鏈? 浣嗗彧鏄疺C緙栬瘧浣跨敤, 榪欑瘒鏂囩珷璇撮渶瑕佹墜鍔ㄥ垱寤? 浣嗗疄闄呬笂, Linux涓嬪彲浠ラ氳繃config緋葷粺鑷姩鐢熸垚鐨? 浣嗘槸Android騫沖彴涓?涓嶄嬌鐢╟ygwin鏃? 灝遍渶瑕佽嚜宸辨墜鍔ㄥ垱寤篶onfig.h, 鍐呭濡備笅
/* This make file is only for android ONLY, modified by Davy Xu June 17, 2013 Cause android platform can't use linux config system when cygwin envirement is not available*//* the location of <hash_set> */#define HASH_SET_H <ext/hash_set>
#define HASH_MAP_H <ext/hash_map>
#define HASH_NAMESPACE __gnu_cxx
/* define if the compiler has hash_map *///#define HAVE_HASH_MAP 1/* define if the compiler has hash_set *///#define HAVE_HASH_SET 1#define HAVE_PTHREAD
鍓╀笅鐨勪簨鎯呭氨綆鍗曚簡, 鍦ㄤ綘鐨勫伐紼婣ndroid.mk閲屾坊鍔爌rotobuf鐨勫紩鐢?/p>
渚嬪:
LOCAL_WHOLE_STATIC_LIBRARIES += protobuf-2.4.1
$(call import-module,protobuf-2.4.1)
榪樿鍦∟DK_MODULE_PATH涓鍔犳悳绱㈣礬寰凞:\Develop\ProjectName\sdk\
娉ㄦ剰, 榪欓噷protobuf-2.4.1鍚嶇О蹇呴』涓巗dk涓嬬殑鏂囦歡澶瑰悕, LOCAL_MODULE涓殑鍚嶇О淇濇寔涓鑷? 鍚﹀垯鎼滅儲涓嶅埌
璇鋒敞鎰忎笅杞藉搴斾綘緋葷粺鐨勭増鏈? 64浣嶇郴緇熻淇濊瘉鍚庢枃鍏ㄧ郴浣跨敤64浣嶇▼搴? 浠ュ厤閬囧埌涓嶅繀瑕佺殑楹葷儲
1.JDK&JRE JAVA榪愯鏃跺強寮鍙戝寘
2.ADT 鏄疎clipse鐨勪竴涓彃浠訛紝榪欎竴姝ユ槸涓轟簡綆$悊瀹夊崜寮鍙戝簱
http://developer.android.com/sdk/index.html
浣滀負鏂版墜, 璇蜂笅杞紸DT Bundle For Windows, 榪欎釜鐗堟湰宸茬粡鍖呭惈
ADK錛堝畨鍗撳紑鍙戝寘錛? CDT錛圗clipse鐨凜/C++寮鍙戞彃浠訛級鍙婂搴旂殑Eclipse, 鍙互閬垮厤絎竴嬈¢儴緗插嚭鐜扮殑鍚勭鐑﹀績!
3.NDK 鍙湁ADT宸茬粡鍙互榪愯鏅氱殑Andriod紼嬪簭錛屼絾鏄鏋滈渶瑕佺紪璇慍/C++紼嬪簭錛?榪橀渶瑕丯DK
http://developer.android.com/tools/sdk/ndk/index.html
4. cocos2dx 2.0.4鐗堟湰
鍑嗗SDK API
涓嬭澆濂紸DT鍚庤В鍘嬶紝 鏈夊涓嬬洰褰?/p>
eclipse\ <- 寮鍙戠幆澧?/p>
sdk\ <- Andriod SDK
SDK Manager.exe <-- Android寮鍙戝寘綆$悊鍣? 鐢變簬Andriod鐗堟湰杈冨, 鎵浠ユ綆$悊鍣ㄥ彲浠ユ柟渚垮紑鍙戣呴夋嫨閮ㄧ講鐩爣鏈哄櫒
鎵撳紑SDK Manager鍦ˋndroid 2.2(API 8)閲岀殑 SDK Platform, Google APIs鍓嶆墦鍕? 鐐瑰嚮鍙充笅瑙掔殑Instal packages
濡傛灉鎰熻涓嬭澆閫熷害鎱? 鍙互縐繪榪欓噷http://my.oschina.net/heguangdong/blog/17443, 閫夋嫨Andriod紱葷嚎涓嬭澆
榪欓噷鏄笅杞介摼鎺?/p>
http://dl-ssl.google.com/android/repository/google_apis-8_r02.zip
http://dl-ssl.google.com/android/repository/android-2.2_r02-windows.zip
https://dl-ssl.google.com/android/repository/usb_driver_r04-windows.zip
鎶奱ndroid寮澶寸殑鏂囦歡瑙e帇鍒皃latforms鐩綍涓?/p>
鎶奼oole_apis寮澶寸殑鏂囦歡瑙e帇鍒癮dd-ons鐩綍涓?/p>
鎶妘sb_driver_r03-windows.zip瑙e帇鍒皍sb_driver鐩綍涓嬨?/p>
Eclipse瀵煎叆宸ョ▼
鎵撳紑Eclipse
瀵煎叆Cocos2dx渚嬪瓙宸ョ▼:
Eclipse涓璅ile->New->Other...閫夋嫨Andriod Project from Existing Code
鍦↖mport Projects鐨凴oot Directory涓鍏:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\samples\HelloCpp\proj.android\
娉ㄦ剰, 涓嶈閫変腑 Copy project into workspace, 鍚﹀垯璺緞緙栦貢寰堥毦緙栬瘧鎴愬姛
瀵煎叆cocos2dx鐨刯ava妗嗘灦
鍦╯rc鐩綍涓璶ew package, 杈撳叆org.cocos2dx.lib, 鍦╫rg.cocos2dx.lib鐨刾ackage涓偣Import-> FileSystem
閫変腑鐩綍D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\cocos2dx\platform\android\java\src\org\cocos2dx\lib\, 鐐歸夋墍鏈塲ava鏂囦歡
宸ョ▼Properties->Builder->New->Program
鍦∕ain鏍囩涓~鍐?/strong>
濉啓NDK緙栬瘧鍛戒護琛?D:\Develop\android-ndk-r8e\ndk-build.cmd
鐐瑰嚮Browser Workspace閫変腑褰撳墠宸ョ▼,鍑虹幇${workspace_loc:/HelloCpp}
鍒囨崲鍒癊nvironment鏍囩涓~鍐?/strong>
鏂板緩NDK_MODULE_PATH 濉啓D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\;D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\cocos2dx\platform\third_party\android\prebuilt\
淇敼cocos2dx鐨凙ndroid.mk, diff濡備笅
@@ -153,6 +153,7 @@
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_jpeg_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libxml2_static
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_libtiff_static
+LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
# define the macro to compile through support/zip_support/ioapi.c
LOCAL_CFLAGS := -DUSE_FILE32API
@@ -164,3 +165,4 @@
$(call import-module,libpng)
$(call import-module,libxml2)
$(call import-module,libtiff)
+$(call import-module,CocosDenshion/android)
F&Q
andriod-8闂
淇敼D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4cocos2dx\platform\android\java\project.properties涓殑target=android-8鏀規垚浣犻渶瑕佺殑鐗堟湰
resources.ap_ does not exist
assert鐩綍涓湁璧勬簮鍑洪棶棰? 鎺掓煡鍗沖彲
渚嬪: cocos2d-2.0-x-2.0.4\samples\TestCpp\proj.android\assets\Images\*.pvr.gz
鍚姩Android妯℃嫙鍣ㄦ椂鐨凢ailed to allocate memory: 8闂
璋冩暣鍐呭瓨鍊?璇鋒眰鍐呭瓨澶ぇ瀵艱嚧
api鐗堟湰榪囦綆瀵艱嚧JAVA Symbol鏈畾涔夐棶棰?/strong>
setEGLContextClientVersion undefined
api8(andriod 2.2)鍚庣殑鐗堟湰, 鎵嶆敮鎸乷penGL es 2.0
鑷繁鍋氬伐紼嬮亣鍒扮殑闂D:\Develop\RevWar\sdk\cocos2d-2.0-x-2.0.4\/cocos2dx/platform/android/jni/JniHelper.h:28:18: fatal error: string: No such file or directory
灝哻ocos2dx渚嬪瓙涓殑Application.mk鎷瘋繃鏉? 淇敼涓嬪唴閮ㄥ悕縐板嵆鍙?/p>
璋冭瘯璇峰敖閲忎嬌鐢ㄧ湡鏈? 妯℃嫙鍣ㄩ熷害寰堟參
灝忕背2榛樿鍙兘綆$悊鏂囦歡, 鏃犳硶鐢╝db 榪炴帴, 鍥犳闇瑕佸畨瑁呴┍鍔? USB椹卞姩鐩存帴鍦ㄦ彃鍏ョ數鑴戝悗鐨勮櫄鎷熺洏閲屾壘.. 榪欎釜澶潙浜?.
淇濊瘉姣忔閮借兘閮ㄧ講鏈鏂扮殑紼嬪簭
璇鋒墽琛屾瘡嬈lean, Build project, Debug. 鐪熸満涓婂湪闇瑕佹椂, 浼氬脊鍑哄畨瑁?..
Android鍚姩鏃ュ織
甯︽湁ADT鐨凟clipse涓湁涓涓猯ogcat紿楀彛, 閲岄潰鏈夌郴緇熷強紼嬪簭鏈韓鐨勬棩蹇? 鍙互鍋氳繃婊?鏂逛究媯鏌ラ棶棰? 濡傞渶鑷繁鎵撴棩蹇? 鍙互浣跨敤cocos2dx涓殑LOGD瀹忔潵鍋? 鍘熷瀷鏄痏_android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
Remark
娣誨姞assert鍚? F5鍒鋒柊鍚庡啀緙栬瘧
NDK build鏃?榛樿浠庡伐紼嬬殑jni鐩綍寮濮?
Andriod.mk鐨刬mport 鍘熷垯$(call import-module,妯″潡鍚? 榪欓噷鐨勬ā鍧楀悕蹇呴』涓庣洰褰曞悕, 妯″潡make file涓殑鍚嶇О鎶ョ焊涓鑷?
鍙傝冩枃绔?/strong>
http://www.cnblogs.com/ybgame/archive/2012/06/07/2540693.html
鍙戞枃鏃? Andriod Studio宸茬粡鍙戝竷浜嗕竴孌墊椂闂? 铏界劧鏄祴璇曠増, 浣嗗皢浠h〃鏈潵鏇存柟渚跨殑Andriod鍙戝竷宸ュ叿
緙栬瘧python鐗堢殑protobuf妯″潡
鍦?a >https://code.google.com/p/protobuf/downloads/list 涓嬭澆瀹樻柟鐨勫師鐢熺増鏈琾rotobuf, 榪欓噷鍙戞枃鏃朵嬌鐢ㄧ殑鏄?.4.1鐗堟湰
緙栬瘧鍑簆rotoc鎵ц鏂囦歡, 鏀句竴浠藉湪protobuf-2.4.1\src\涓?/p>
涓嬭澆python2.7鐗堟湰, 鍦╬rotobuf-2.4.1\python涓嬭繍琛宲ython setup.py install(濡傛灉鎵句笉鍒皃ython璇風粰python緇濆璺緞)
榪欎竴姝? python浼氫笅涓涓泲( 鐪熺殑鏄竴涓猵ython鐨別gg鏂囦歡 ), 鐒跺悗緙栬瘧鍑簆ython鐗堟湰鐨刾rotobuf妯″潡鏀劇疆鍦╬ython涓?/p>
鍒朵綔protoc-gen-lua鐨勬壒澶勭悊
鏀句竴浠絧rotoc鍦╬rotoc-gen-lua鐨刾lugin鐩綍
緙栧啓鎵瑰鐞?protoc-gen-lua.bat
@python "%~dp0protoc-gen-lua"
鍗忚鐩綍鐢熸垚鑴氭湰
鍦ㄤ綘闇瑕佹斁緗崗璁殑鐩綍緙栧啓濡備笅鎵瑰鐞?/p>
buildproto.bat
rd /S /Q .\%1%
"..\..\src\protoc-gen-lua\plugin\protoc.exe" --plugin=protoc-gen-lua="..\..\src\protoc-gen-lua\plugin\protoc-gen-lua.bat" --lua_out=. %1%.proto
娉ㄦ剰protoc.exe鍙妏rotoc-gen-lua.bat鐨勮礬寰勭鍚堜綘鐨勮礬寰?/p>
鍐嶇紪鍐欒緙栬瘧鐨刾roto鍗忚鐨勬壒澶勭悊generate.bat
call buildproto.bat loginsvc
鎵цgenerate.bat鍚? 灝嗕細緙栬瘧鍚岀洰褰曚笅鐨刲oginsvc.proto,杈撳嚭loginsvc_pb.lua
緙栬瘧閾炬帴lua鐨刾b搴?/strong>
灝唒rotoc-gen-lua\protobuf\鐩綍鎷瘋礉鍒頒箣鍓嶇殑鍗忚鐩綍
灝嗗叾涓嬬殑pb.c閾懼叆浣犵殑宸ョ▼, 娉ㄦ剰VS2010鐨刅C涓嬮渶瑕佷慨鏀規簮鐮?/p>
1.灝?#include <endian.h>淇敼涓?/p>
#ifndef _WIN32
#include <endian.h>
#endif
閬垮厤鍦╳indows涓嬬己澶辨枃浠舵姤閿?
2. 璋冩暣struct_unpack鍑芥暟鍓嶅嚑琛屼負
static int struct_unpack(lua_State *L)
{
uint8_t format = luaL_checkinteger(L, 1);
size_t len;
const uint8_t* buffer = (uint8_t*)luaL_checklstring(L, 2, &len);
size_t pos = luaL_checkinteger(L, 3);
uint8_t out[8];
buffer += pos;
閬垮厤VS2010鐨刅C緙栬瘧鍣ㄨ繃浜庢爣鍑? 涓ユ牸瑕佹眰C椋庢牸鍑芥暟鍙橀噺鍓嶇疆澹版槑
鍦╨ua_State澹版槑鍚庢坊鍔犲涓嬩唬鐮?/p>
extern "C" { int luaopen_pb (lua_State *L);} // 娉ㄦ剰闃插湪鍛藉悕絀洪棿澶栫殑鍏ㄥ眬澹版槑
luaopen_pb( L ); // 鐩存帴娉ㄥ叆鍏ㄥ眬pb, 閬垮厤鍔ㄦ佸姞杞絧b.dll閫犳垚鐨勪竴緋誨垪璺ㄥ鉤鍙伴棶棰?/p>
lua涓嬌鐢╬b
local loginsvc_pb = require “loginsvc_pb”local REQ = loginsvc_pb.CheckVersionREQ()local Data = REQ:SerializeToString( )local ACK = loginsvc_pb.CheckVersionACK()ACK:ParseFromString( Data )
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
鎴戠殑宸ョ▼鐩綍
script\
protobuf\
buildproto.bat
generate.bat
loginsvc_pb.lua
loginsvc.proto
Main.lua
src\
protoc-gen-lua\
example\
plugin\
protobuf\
鍦ㄧ紪鍐欐湰鏂囧墠, 絎旇呬嬌鐢ㄨ繃璇稿libunwind絳夊簱榪涜閿欒鏃跺爢鏍堟墦鍗? 浣嗘槸鍏舵湰韜敱浜庨渶瑕佸紩鐢ㄧ涓夋柟搴? 浣跨敤榪樻槸紼嶅井楹葷儲.
緇忚繃Google鍚? 灞呯劧鎵懼埌涓綃?a >濂芥枃, 鍏墮氳繃鎹曡幏SIGSEGV淇″彿, 騫惰揩浣跨▼搴忚繘鍏db璋冭瘯闃舵, 鍒╃敤gdb寮哄ぇ鐨勮皟璇曞姛鑳藉彲浠ヨ繘琛屽悇縐嶉敊璇窡韙? 姝ゆ硶宸蹭笌Windows涓嬬▼搴忓穿婧冨悗寮瑰嚭VC璋冭瘯鍑犱箮鎺ヨ繎.
鎴戝湪姝ゆ枃鍩虹涓? 鎵╁睍浜嗗叾閫氱敤鎬у強渚垮埄鎬?/p>
1. 浣跨敤gdb鐨?-ex鍙傛暟, 鍦ㄦ寕鎺ョ▼搴忓悗, 鎵цbt鎸囦護鎵撳嚭紼嬪簭鍫嗘爤
2. 灝嗕俊鎭噸瀹氬悜鍒拌嚜瀹氫箟鐨勬枃浠?鍦ㄥ榪涚▼閮介渶瑕佽繘琛屽悗鍙拌緭鍑烘椂甯︽潵鏇村ぇ鐨勭伒媧繪? 鍚屾椂涔熻В鍐充簡gdb鍙兘鍦ㄥ墠鍙拌皟璇曠殑闂
浠g爜濡備笅
#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <string.h> void dump(int signo) { char buf[1024]; char cmd[1024]; FILE *fh; snprintf(buf, sizeof(buf), "/proc/%d/cmdline", getpid()); if(!(fh = fopen(buf, "r"))) exit(0); if(!fgets(buf, sizeof(buf), fh)) exit(0); fclose(fh); if(buf[strlen(buf) - 1] == '/n') buf[strlen(buf) - 1] = '/0'; snprintf(cmd, sizeof(cmd), "gdb %s %d -ex=bt > ./a.txt", buf, getpid()); system(cmd); exit(0); }
鍦ㄦ湇鍔″櫒寮鍚椂,娣誨姞 signal(SIGSEGV, &dump ); 榪涜淇″彿澶勭悊鎸傛帴鍗沖彲
寮曠敤: http://blog.csdn.net/kakaka2011/article/details/6597857 浣滆? kakaka2011
鈥滱fter a successful async_read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent async_read_until operation to examine.鈥?/p>
鎰忔濇槸, streambuf涓茍涓嶄竴瀹氭槸鍒板垎闅旂鍓嶇殑鎵鏈夋暟鎹? 澶氫綑鐨勬暟鎹彲鑳戒竴鏍蜂細鍦╯treambuf涓? 涔熷氨鏄, 榪橀渶瑕佽嚜宸卞啀嬈″鐞嗕竴閬嶆暟鎹?..
鍔ㄦ墜鍛? async_read_until鐪嬩技灝辨槸涓涓簾鏌? 搴曞眰宸茬粡璐逛簡寰堝CPU鍦ㄩ愬瓧絎︿笌鍒嗛殧絎︾殑鍖歸厤涓? 鎶涗笂鏉ョ殑鏁版嵁灞呯劧榪樻槸鍗婃垚鍝?
浠g爜濡備笅, 嫻嬭瘯閫氳繃, 浣嗘槸瀹炲湪寰堣垂瑙d負鍟ラ潪瑕佸啀鍋氫竴嬈?.
boost::asio::streambuf* SB = SBP.get();
// 璁塊棶緙撳啿
const char* Buffs = boost::asio::buffer_cast<const char*>( SB->data() );
uint32 DataSize = 0;
for ( uint32 i = 0; i < SB->size(); ++i )
{
const char DChar = Buffs[i];
// 榪欓噷闇瑕佽嚜宸卞垽鏂瓧絎︿覆鍐呭, read_until鐨勬枃妗i噷榪欎箞璇寸殑
if ( DChar == '\0' )
{
DataSize = i;
break;
}
}
if ( DataSize > 0 )
{
// 鍙栨垚瀛楃涓?/span>
std::string FullText( Buffs, DataSize );
// 娑堣垂
SB->consume( DataSize );
mWorkService->post(
boost::bind(&AsioSession::NotifyReadString,
shared_from_this(),
FullText )
);
}鍙﹀, 涓轟簡淇濊瘉杈撳叆鎬у畨鍏? 鍙互鍦╯treambuf鏋勯犳椂鍔犱竴涓渶澶т竴涓鍙栭噺, 瓚呰繃姝ら噺浼氳繑鍥炴姤閿? 閬垮厤浜嗙紦鍐插尯琚拺鐖嗙殑鍗遍櫓
鍦╓indows鐜鍙橀噺涓病鏈夋壘鍒?(QTDIR)
闅忓嵆鍦≦t鐨刅isual Studio 鎻掍歡鑿滃崟涓? Qt->Qt Options-> Qt Versions
璁劇疆Default Qt/Win version涓烘柊鐗堟湰
閫変腑鍘熸湁鐨凲t宸ョ▼, 鍦ㄦ彃浠惰彍鍗曚腑鎵懼埌Qt Project Settings->Properties->Version涓?灝嗙増鏈緗負鏈鏂扮増鏈?/p>
濡傛灉瑁呮湁Visual AssitX, 姝ゆ椂榪欎笢瑗垮簲璇ュ紑濮婸arse鏂扮殑Qt搴撲簡
have fun
!
鏈榪戦亣鍒癉B鏈嶅姟鍣ㄤ腑鎶ュ嚭涓涓狹ySQL鐨勯敊璇?Commands out of sync; you can't run this command now,2014
鏌ラ槄寰堝浠g爜, 瑙e喅鏂規硶閮芥槸浣跨敤C鎺ュ彛鐨勬柟寮? 妯′豢鍏惰В鍐蟲柟娉?鍦∕ySQL++涓壘鍒頒簡姣旇緝濂界殑瑙e喅鏂規:
鏂規A: 娓呯┖姣忔鏈嬌鐢ㄧ殑璁板綍
for (int i = 1; DataQuery.more_results(); ++i) { DataQuery.store_next(); }
鍏朵腑 DataQuery綾誨瀷涓簃ysqlpp::Query
鏂規B: 瀵逛簬瀛樺偍榪囩▼涓?浣跨敤浜嗗涓猻elect璇彞榪斿洖鍚屾牱鐨勫垪緇撴灉, 灝遍渶瑕佷嬌鐢ㄤ互涓嬭鍙?/p>
static void print_multiple_results(Query& query)
{ // 鎵ц鏌ヨ騫惰緭鍑虹粨鏋滆〃StoreQueryResult res = query.store();
print_result(res, 0);
for (int i = 1; query.more_results(); ++i) {
res = query.store_next();
print_result(res, i);
}
}
鍙傝冩枃绔?http://hi.baidu.com/freeknight/item/ea9fd88e7d291f854514cf43
闀夸箙浠ユ潵錛孡isp涓鐩磋璁稿浜鴻涓哄彶涓婃渶闈炲嚒鐨勭紪紼嬭璦銆傚畠涓嶄粎鍦?0澶氬勾鍓嶈癁鐢熺殑鏃跺欏甫鏉ヤ簡璇稿闈╁懡鎬х殑鍒涙柊騫舵瀬澶у湴褰卞搷浜嗗悗鏉ョ紪紼嬭璦鐨勫彂灞曪紝鍗充嬌鍦ㄤ竴澶ф壒鐜頒唬璇█涓嶆柇娑岀幇鐨勪粖澶╋紝Lisp鐨勮澶氱壒鎬т粛鐒舵湭琚秴瓚娿傚綋鍚勫紡鍚勬牱鐨勭紪紼嬭璦鎽嗗湪闈㈠墠錛屾垜浠彲浠ヤ粠榪愯鏁堢巼銆佸涔犳洸綰褲佺ぞ鍖烘椿璺冨害銆佸巶鍟嗘敮鎸佺瓑澶氱涓嶅悓鐨勮搴﹁繘琛岃瘎鍒ゅ拰閫夋嫨錛屼絾鎴戠壒鍒湅涓殑涓鐐瑰湪浜庤璦鑳藉惁鏈夋晥鍦拌〃杈劇紪紼嬭呯殑璁捐鎬濇兂銆傚涔燙鎰忓懗鐫瀛︿範濡備綍鐢ㄨ繃紼嬫潵琛ㄨ揪璁捐鎬濇兂錛屽涔燡ava鎰忓懗鐫瀛︿範濡備綍鐢ㄥ璞℃潵琛ㄨ揪璁捐鎬濇兂錛岃岃櫧鐒禠isp涓庡嚱鏁板紡緙栫▼鏈夊緢澶х殑鍏崇郴錛屼絾瀛︿範Lisp緇濅笉浠呬粎鏄涔犲浣曠敤鍑芥暟琛ㄨ揪璁捐鎬濇兂銆傚疄闄呬笂錛?strong>鍑芥暟寮忕紪紼嬪茍闈濴isp鐨勬湰璐?/strong>錛屽湪宸茬粡鎺屾彙浜唋ambda銆侀珮闃跺嚱鏁般侀棴鍖呫佹儼鎬ф眰鍊肩瓑鍑芥暟寮忕紪紼嬫蹇典箣鍚庯紝瀛︿範Lisp浠嶇劧澶уぇ鍔犳繁浜嗘垜瀵圭紪紼嬬殑鐞嗚В銆?strong>瀛︿範Lisp鎵鏀惰幏鐨勬槸濡備綍鈥滆嚜鐢卞湴鈥濊〃杈句綘鐨勬濇兂錛岃繖姝f槸Lisp鏈澶х殑欖呭姏鎵鍦紝涔熸槸榪欓棬鍙よ佺殑璇█浠嶇劧鍏鋒湁寰堝己鐨勭敓鍛藉姏鐨勬牴鏈師鍥犮?
Lisp鎰忎負琛ㄥ鐞?List Processing)錛屾簮鑷璁¤匤ohn McCarthy浜?960騫村彂琛ㄧ殑涓綃囪鏂囥婄鍙瘋〃杈懼紡鐨勯掑綊鍑芥暟鍙婂叾鏈哄櫒璁$畻銆嬨侻cCarthy鍦ㄨ繖綃囪鏂囦腑鍚戞垜浠睍紺轟簡鐢ㄤ竴縐嶇畝鍗曠殑鏁版嵁緇撴瀯S琛ㄨ揪寮?S-expression)鏉ヨ〃紺轟唬鐮佸拰鏁版嵁錛屽茍鍦ㄦ鍩虹涓婃瀯寤轟竴縐嶅畬鏁寸殑璇█銆侺isp璇█褰㈠紡綆鍗曘佸唴娑墊繁鍒伙紝Paul Graham鍦ㄣ奓isp涔嬫牴婧愩嬩腑灝嗗叾瀵圭紪紼嬬殑璐$尞涓庢鍑犻噷寰峰鍑犱綍鐨勮礎鐚浉鎻愬茍璁恒?
鐒惰岋紝涓庢暟瀛︿笘鐣屼腑綆鍗曟槗鎳傜殑嬈ф皬鍑犱綍褰㈡垚椴滄槑瀵規瘮錛岀▼搴忎笘鐣屼腑鐨凩isp鍗翠竴鐩存槸涓縐嶅彜鑰佽屽張紲炵鐨勫瓨鍦紝鐪熸鐞嗚В鍏剁簿濡欑殑浜鴻繕鏄皯鏁般備粠琛ㄩ潰涓婄湅錛孡isp鏈鏄庢樉鐨勭壒寰佹槸瀹冣滃彜鎬濈殑S琛ㄨ揪寮忚娉曘係琛ㄨ揪寮忔槸涓涓師瀛?atom)錛屾垨鑰呰嫢騫睸琛ㄨ揪寮忕粍鎴愮殑鍒楄〃(list)錛岃〃杈懼紡涔嬮棿鐢ㄧ┖鏍煎垎寮錛屾斁鍏ヤ竴瀵規嫭鍙蜂腑銆傗滃垪琛ㄢ滆繖涓湳璇彲鑳戒細瀹規槗璁╀漢鑱旀兂鍒版暟鎹粨鏋勪腑鐨勯摼琛ㄤ箣綾葷殑綰垮艦緇撴瀯錛屽疄闄呬笂錛孡isp鐨勫垪琛ㄦ槸涓縐嶅彲宓屽鐨勬爲褰㈢粨鏋勩備笅闈㈡槸涓浜汼琛ㄨ揪寮忕殑渚嬪瓙:
foo
()
(a b (c d) e)
(+ (* 2 3) 5)
(defun factorial (N)
(if (= N 1)
1
(* N (factorial (- N 1)))
)
)
鎹錛岃繖涓彜鎬殑S琛ㄨ揪寮忔槸McCarthy鍦ㄥ彂鏄嶭isp鏃跺欐墍閲囩敤鐨勪竴縐嶄復鏃惰娉曪紝浠栧疄闄呬笂鏄噯澶囦負Lisp鍔犱笂涓縐嶈縐頒負M琛ㄨ揪寮?M-expression)鐨勮娉曪紝鐒跺悗鍐嶆妸M琛ㄨ揪寮忕紪璇戜負S琛ㄨ揪寮忋傜敤涓涓氫織鐨勭被姣旓紝S琛ㄨ揪寮忕浉褰撲簬鏄疛VM鐨勫瓧鑺傜爜錛岃孧琛ㄨ揪寮忕浉褰撲簬Java璇█錛屼絾鏄悗鏉isp鐨勪嬌鐢ㄨ呴兘鐔熸倝騫跺枩嬈笂浜嗙洿鎺ョ敤S琛ㄨ揪寮忕紪鍐欑▼搴忥紝騫朵笖浠栦滑鍙戠幇S琛ㄨ揪寮忔湁璁稿鐙壒鐨勪紭鐐癸紝鎵浠琛ㄨ揪寮忕殑寮曞叆涔熷氨琚棤闄愭湡寤惰繜浜嗐?
璁稿Lisp鐨勫叆闂ㄦ枃绔犻兘姣旇緝寮鴻皟Lisp鐨勫嚱鏁板紡鐗規э紝鑰屾垜璁や負榪欐槸涓縐嶈瀵箋傜湡姝g殑Lisp涔嬮棬涓嶅湪鍑芥暟寮忕紪紼嬶紝鑰屽湪S琛ㄨ揪寮忔湰韜紝Lisp鏈澶х殑濂ョ灝辮棌鍦⊿琛ㄨ揪寮忓悗闈€係琛ㄨ揪寮忔槸Lisp鐨勮娉曞熀紜錛岃娉曟槸璇箟鐨勮澆浣擄紝褰㈠紡鏄疄璐ㄧ殑瀵勬墭銆?strong>鈥淪琛ㄨ揪寮忊濇槸紼嬪簭鐨勪竴縐嶅艦錛屾濡傗滀竷璦鈥濇槸璇楃殑涓縐嶅艦錛屸滃井鍗氣濇槸淇℃伅鐨勪竴縐嶅艦銆傛鏄艦鐨勪笉鍚岋紝璁╁井鍗氫笌鍗氬鏈変簡璐ㄧ殑宸紓錛屽悓鏍風殑閬撶悊錛屾鏄疭琛ㄨ揪寮忚Lisp涓嶤銆丣ava銆丼QL絳夎璦鏈変簡澶╁¥涔嬪埆銆?
涓闂ㄨ璦鑳藉惁鏈夋晥鍦拌〃杈劇紪紼嬭呯殑璁捐鎬濇兂鍙栧喅浜庡叾鎶借薄鏈哄埗鐨勮涔夎〃杈捐兘鍔涖傛牴鎹娊璞℃満鍒剁殑涓嶅悓錛岃璦鐨勬娊璞℃満鍒跺艦鎴愪簡闈㈠悜榪囩▼銆侀潰鍚戝璞°佸嚱鏁板紡銆佸茍鍙戝紡絳変笉鍚岀殑鑼冨紡銆傚綋浣犻噰鐢ㄦ煇涓縐嶈璦錛屽熀鏈笂灝辮〃紺轟綘宸茬粡鈥滈潰鍚慩XX鈥滀簡錛屼綘鐨勬濈淮鏂瑰紡鍜岃В鍐抽棶棰樼殑鎵嬫灝變細渚濊禆浜庤璦鎵鎻愪緵鐨勬娊璞℃柟寮忋傛瘮濡傦紝閲囩敤Java璇█閫氬父鎰忓懗鐫閲囩敤闈㈠悜瀵硅薄鍒嗘瀽璁捐錛涢噰鐢‥rlang閫氬父鎰忓懗鐫鎸堿ctor妯″瀷瀵瑰茍鍙戜換鍔¤繘琛屽緩妯°?
鏈夌粡楠岀殑紼嬪簭鍛橀兘鐭ラ亾錛屾棤璁烘槸闈㈠悜XXX緙栫▼錛岀▼搴忚璁¢兘鏈変竴鏉♀滄娊璞″師鍒欌滐細What涓嶩ow瑙h︺備絾鏄紝鏅氳璦鐨勯棶棰樺氨鍦ㄤ簬琛ㄨ揪What鐨勬墜孌甸潪甯告湁闄?/strong>錛屾棤闈炴槸榪囩▼銆佺被銆佹帴鍙c佸嚱鏁扮瓑鍑犵鏂瑰紡錛岃岃澶氶鍩熼棶棰樻槸鏃犳硶鐩存帴鎶借薄涓哄嚱鏁版垨鎺ュ彛鐨勩傛瘮濡傦紝浣犲畬鍏ㄥ彲浠ュ湪C璇█涓畾涔夎嫢騫插嚱鏁版潵鍋氬埌make file鎵鍋氱殑浜嬫儏錛屼絾C浠g爜寰堥毦鍍弇ake file閭f牱澹版槑寮忓湴浣撶幇鍑簍arget銆乨epends絳夎涔夛紝瀹冧滑鍙細浣滀負瀹炵幇緇嗚妭琚飯娌″湪涓涓釜鐨凜鍑芥暟涔嬩腑銆傞噰鐢∣OP鎴栨槸FP絳夊叾瀹冭寖寮忎篃浼氶亣鍒板悓鏍風殑鍥伴毦錛屼篃灝辨槸璇磎ake file璇█鎵浠h〃鐨勬娊璞$淮搴︿笌闈㈠悜榪囩▼銆丱OP浠ュ強FP鐨勬娊璞$淮搴︽槸姝d氦鐨勶紝浣垮緱鍚勭鑼冨紡鏃犳硶鐩存帴琛ㄨ揪鍑簃ake file鐨勮涔夈傝繖灝辨槸鏅氳璦鐨勨滃垰鎬р濈壒寰侊紝瀹冭姹傛垜浠繀欏諱互璇█鐨勬娊璞$淮搴﹀幓鍒嗘瀽鍜岃В鍐抽棶棰橈紝鎶婇棶棰樻槧灝勫埌璇█鐨勫熀鏈娉曞拰璇箟銆?
鏇磋繘涓姝ワ紝濡傛灉浠旂粏鎺㈢┒榪欑鍒氭х殑鏍規簮錛屾垜浠細鍙戠幇姝f槸鐢變簬鏅氳璦璇硶鍜岃涔夌殑绱ц﹀悎閫犳垚浜嗚繖縐嶅垰鎬с傛瘮濡傦紝C璇█涓璸rintf(鈥渉ello %s鈥? name)絎﹀悎鍑芥暟璋冪敤璇硶錛屽畠琛ㄨ揪浜嗗嚱鏁拌皟鐢ㄨ涔夛紝闄ゆ涔嬪鍒棤浠栦箟錛汮ava涓璱nterface IRunnable { 鈥?}絎﹀悎鎺ュ彛瀹氫箟璇硶錛屽畠琛ㄨ揪浜嗘帴鍙e畾涔夎涔夛紝闄ゆ涔嬪鍒棤浠栦箟銆傚鏋滀綘璁や負鈥滆娉曞拰璇箟绱ц﹀悎鈥滄槸鐞嗘墍褰撶劧鐨勶紝鐪嬩笉鍑鴻繖鏈変粈涔堥棶棰橈紝閭d箞鐞嗚ВLisp灝變細璁╀綘瀵規浜х敓鏇存繁鐨勮璇嗐?
褰撲綘鐪嬪埌Lisp鐨?f a (b c))鐨勬椂鍊欙紝浣犱細鎯沖埌浠涔堬紵浼氫笉浼氶┈涓婅仈鎯沖埌鍑芥暟姹傚兼垨鏄畯鎵╁睍錛熷氨鍍忓湪C璇█閲岀湅鍒癵cd(10, 15)椹笂鎯沖埌鍑芥暟璋冪敤錛屾垨鑰呭湪Java閲岀湅鍒癱lass A椹笂鎯沖埌綾誨畾涔変竴鏍楓傚鏋滅湡鏄繖鏍鳳紝閭e畠灝辨槸浣犵悊瑙isp鐨勪竴閬撻殰紕嶏紝鍥犱負浣犲凡緇忎範鎯簡欏虹潃璇█鍘繪濊冿紝鎬繪槸鍦ㄦ兂榪欎竴鍙ヨ瘽鏈哄櫒鎬庝箞瑙i噴鎵ц錛熼偅涓鍙ヨ瘽鍙堝搴旇璦鐨勫摢涓壒鎬э紵鐞嗚ВLisp瑕佸弽榪囨潵錛岃璇█欏虹潃浣狅紝Lisp鐨?f a (b c))鍙互鏄換浣曡涔夛紝瀹屽叏鐢變綘鏉ュ畾錛屽畠鍙互鏄嚱鏁板畾涔夈佺被瀹氫箟銆佹暟鎹簱鏌ヨ銆佹枃浠朵緷璧栧叧緋伙紝寮傛浠誨姟鐨勬墽琛屽叧緋伙紝涓氬姟瑙勫垯 鈥?
涓嬮潰鎴戝噯澶囧厛閫氳繃鍑犱釜鍏蜂綋鐨勪緥瀛愰愭灞曠ずLisp鐨勬湰璐ㄣ傞渶瑕佽鏄庣殑鏄紝鐢變簬Lisp鐨凷琛ㄨ揪寮忓拰XML鐨勮娉曞艦寮忛兘鏄竴縐嶆爲褰㈢粨鏋勶紝鍦ㄨ涔夎〃杈炬柟闈簩鑰呭茍鏃犳湰璐ㄧ殑宸埆銆傛墍浠ワ紝涓轟簡鐞嗚В鏂逛究錛屼笅闈㈡垜鏆備笖鐢ㄥ鏁頒漢鏇翠負鐔熸倝鐨刋ML鏉ュ啓浠g爜錛岃璁頒綇鎴戜滑鍙互寰堣交鏄撳湴鎶奨ML浠g爜鍜孡isp浠g爜鐩鎬簰杞崲銆?
棣栧厛錛屾垜浠彲浠ヨ交鏄撳湴鐢╔ML鏉ュ畾涔変竴涓眰涓や釜鏁版渶澶у叕綰︽暟鐨勫嚱鏁幫細 鍏舵錛屾垜浠彲浠ョ敤瀹冩潵瀹氫箟綾伙細 榪樺彲浠ヨ交鏄撳湴鐢ㄥ畠鏉ョ紪鍐欏叧緋繪煡璇細 榪樺彲浠ョ敤瀹冩潵瀹炵幇綾諱技make file鐨勮嚜鍔ㄥ寲鏋勫緩(璇硶鍙栬嚜ant)錛?pre> <project name="MyProject" default="dist" basedir=".">
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source " >
<javac srcdir="${src}" destdir="${build}"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<mkdir dir="${dist}/lib"/>
<jar jarfile="${dist}/lib/MyProject-${DSTAMP}.jar" basedir="${build}"/>
</target>
<target name="clean" description="clean up" >
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>
涓鍙f皵涓句簡榪欎箞澶氫釜渚嬪瓙錛岀洰鐨勫湪浜庣敤XML榪欑鏍戝艦緇撴瀯鏉ヨ鏄嶭isp鐨凷琛ㄨ揪寮忔墍鑳藉鎻忚堪鐨勮涔夈備笉鐭ラ亾浣犳槸鍚﹀彂鐜頒簡S琛ㄨ揪寮忓拰XML榪欑鏍戝艦璇硶鍦ㄨ涔夋瀯閫犳柟闈㈡湁鐫鐗瑰埆鐨勨滄煍鎬р濓紵鎴戜滑鍙互杞繪槗鍦扮敤瀹冩瀯閫犲嚭鍑芥暟銆佸彉閲忋佹潯浠跺垽鏂涔夛紱綾匯佸睘鎬с佹柟娉曡涔夛紱鍙互杞繪槗鍦版瀯閫犲嚭鍏崇郴妯″瀷鐨剆elect銆亀here璇箟錛涘彲浠ヨ交鏄撳湴鏋勯犲嚭make鐨則arget銆乨epends璇箟錛岀瓑絳夋暟涓嶆竻鐨勮涔夈傚湪鏅氳璦閲岋紝浣犲彲浠ュ畾涔変竴涓嚱鏁般佷竴涓被錛屼絾浣犳棤娉曚負C璇█澧炲姞鍖垮悕鍑芥暟鐗規э紝涔熸病娉曠粰Java璇█鍔犱笂RAII璇箟錛岀敋鑷寵繛鑷繁鍒涢犱竴涓猣oreach寰幆閮戒笉琛岋紝鑰岃嚜瀹氫箟璇箟鎰忓懗鐫鍦↙isp涔嬩笂浣犲垱閫犱簡涓闂ㄨ璦錛佷笉綆℃槸闈㈠悜榪囩▼錛岄潰鍚戝璞★紝鍑芥暟寮忥紝榪樻槸鍏崇郴妯″瀷錛屽湪Lisp閲岀粺緇熼兘鍙樻垚浜嗕竴縐岲SL錛岃孡isp鏈韓涔熷氨鎴愪簡涓縐嶅畾涔夎璦鐨勮璦錛屽嵆鍏冭璦(Meta Language)銆?
Lisp鐨勬煍鎬т笌S琛ㄨ揪寮忔湁鐫瀵嗗垏鐨勫叧緋匯侺isp騫朵笉闄愬埗浣犵敤S琛ㄨ揪寮忔潵琛ㄨ揪浠涔堣涔夛紝鍚屾牱鐨凷琛ㄨ揪寮忚娉曞彲浠ヨ〃杈懼悇縐嶄笉鍚岄鍩熺殑璇箟錛岃繖灝辨槸璇硶鍜岃涔夎В鑰?/strong>銆傚鏋滆鏅氳璦鐨勫垰鎬ф簮浜庘滆娉曞拰璇箟绱ц﹀悎鈥濓紝閭d箞Lisp鐨勬煍鎬ф鏄簮浜庘滆娉曞拰璇箟瑙h︹濓紒鈥滆娉曞拰璇箟瑙h︹濅嬌寰桳isp鍙互闅忔剰鍦版瀯閫犲悇縐嶉鍩熺殑DSL錛岃屼笉寮哄埗鐢ㄦ煇涓縐嶈寖寮忔垨鏄鍩熻瑙掑幓鍒嗘瀽鍜岃В鍐抽棶棰樸傛湰璐ㄤ笂錛孡isp緙栫▼鏄竴縐嶈秴瓚婁簡鏅氱紪紼嬭寖寮忕殑鑼冨紡錛岃繖灝辨槸Lisp涔嬮亾錛氶潰鍚戣璦緙栫▼(LOP, Language Oriented Programming)銆俉ikipedia涓婃槸榪欐牱鎻忚堪LOP鐨勶細
Language oriented programming (LOP) is a style of computer programming in which, rather than solving problems in general-purpose programming languages, the programmer creates one or more domain-specific languages for the problem first, and solves the problem in those languages 鈥?The concept of Language Oriented Programming takes the approach to capture requirements in the user鈥檚 terms, and then to try to create an implementation language as isomorphic as possible to the user鈥檚 descriptions, so that the mapping between requirements and implementation is as direct as possible. LOP鑼冨紡鐨勫熀鏈濇兂鏄粠闂鍑哄彂錛屽厛鍒涘緩涓闂ㄦ弿榪伴鍩熸ā鍨嬬殑DSL錛屽啀鐢―SL鍘昏В鍐抽棶棰橈紝瀹冨叿鏈夐珮搴︾殑澹版槑鎬у拰鎶借薄鎬с係QL銆乵ake file銆丆SS絳塂SL閮藉彲浠ヨ璁や負鏄疞OP鐨勫叿浣撳疄渚嬶紝涓嬮潰鎴戜滑鍐嶉氳繃涓や釜甯歌鐨勪緥瀛愭潵鐞嗚ВLOP鐨勪紭鍔褲?
渚?錛氬湪鑲$エ浜ゆ槗緋葷粺涓紝浜ゆ槗鍗忚瀹氫箟鑻ュ共浜岃繘鍒剁殑娑堟伅鏍煎紡錛屼氦鏄撴墍鍜屽鎴風闇瑕佸娑堟伅榪涜緙栫爜鍜岃В鐮併?
娑堟伅鏍煎紡鏄竴縐嶆娊璞$殑瑙勮寖錛屾湰韜笉瀵硅璦鍋氫換浣曠殑闄愬埗錛屼綘鍙互鐢–錛孋++錛孞ava錛屾垨鑰匬ython銆傛櫘閫氱殑瀹炵幇鏂瑰紡鏄寜鐓ф秷鎭牸寮忚鑼冿紝鍦ㄧ浉搴旂殑璇█涓畾涔夋秷鎭粨鏋勶紝騫剁紪鍐欑浉搴旂殑緙栬В鐮佸嚱鏁般傚亣璁句負涓涓秷鎭畾涔夌粨鏋勫拰瀹炵幇緙栬В鐮佸嚱鏁扮殑宸ヤ綔閲忎負M錛屼笉鍚屾秷鎭被鍨嬬殑鏁伴噺涓篘錛岃繖縐嶆柟寮忕殑宸ヤ綔閲忓ぇ鑷翠負M*N銆備篃灝辨槸璇存瘡澧炲姞涓縐嶆秷鎭被鍨嬶紝灝遍渶瑕佷負璇ユ秷鎭畾涔夌粨鏋勶紝瀹炵幇緙栬В鐮佸嚱鏁幫紝寮曞叆bug鐨勫彲鑳芥у綋鐒朵篃鍜孧*N鎴愭姣斻傚鏋滀粩緇嗚瀵熶笉闅懼彂鐜幫紝鍚勪釜娑堟伅緇撴瀯鍏跺疄鏄珮搴︾被浼肩殑錛岀紪瑙g爜鍑芥暟涔熷ぇ鍚屽皬寮傦紝浣嗘槸鏅氳璦鍗存壘涓嶅埌涓縐嶆娊璞℃満鍒惰兘琛ㄨ揪榪欑鍏辨э紝姣斿錛屾垜浠棤娉曢氳繃闈㈠悜瀵硅薄鐨勬柟娉曞畾涔変竴涓熀綾繪妸娑堟伅緇撴瀯鐨勫叡鎬ф娊璞″嚭鏉ワ紝鐒跺悗璁╁叿浣撶殑娑堟伅鍘葷戶鎵垮畠錛岃揪鍒板鐢ㄧ殑鐩殑銆傝繖姝f槸鐢變簬鏅氳璦鐨勬娊璞$淮搴﹂檺鍒舵墍鑷達紝鍦ㄦ櫘閫氳璦涓紝浣犲彧鑳戒粠鍑芥暟銆佹帴鍙g瓑緇村害瀵逛簨鐗╄繘琛屾娊璞★紝鑰屾伆濂芥秷鎭牸寮忓叡鎬ф墍鍦ㄧ殑緇村害涓庤繖浜涙娊璞$淮搴﹀茍涓嶅尮閰嶃?
鍏跺疄錛屼笉鍚屾秷鎭被鍨嬬殑鍏辨у湪浜庡畠浠兘鍏鋒湁鐩稿悓鐨勯鍩熻涔?/strong>錛屾瘮濡傦細鈥滄煇瀛楁鍐呭鏄彟涓涓瓧孌靛唴瀹圭殑md5鐮佲濆氨鏄竴縐嶆秷鎭牸寮忕殑棰嗗煙璇箟錛岃繖縐嶉鍩熻涔夋槸OOP鐨勬娊璞℃満鍒舵棤娉曟弿榪扮殑銆侺OP鐨勬濊礬鏄厛鍒涘緩涓闂ㄦ秷鎭畾涔塂SL錛屾瘮濡傦紝綾諱技Google鐨凱rotocol Buffer錛孉ndroid鐨凙IDL銆傜劧鍚庯紝閫氳繃DSL緙栧啓娑堟伅瀹氫箟鏂囦歡錛岀洿鎺ュ0鏄庡紡鍦版弿榪版秷鎭殑緇撴瀯鐗瑰緛錛屾瘮濡傦紝鎴戜滑鍙互澹版槑寮忓湴鎻忚堪鈥滄煇瀛楁鍐呭鏄彟涓涓瓧孌靛唴瀹圭殑md5鐮佲濄傛垜浠繕闇瑕佷負DSL寮鍙戠紪璇戝櫒鐢ㄤ簬鐢熸垚C銆丣ava絳夐氱敤璇█鐨勬秷鎭畾涔夊拰緙栬В鐮佸嚱鏁般?
鏈変簡娑堟伅瀹氫箟DSL鍜岀紪璇戝櫒涔嬪悗錛岀敱浜嶥SL緙栧啓娑堟伅瀹氫箟鏄竴縐嶉珮搴﹀0鏄庡紡鐨勭紪紼嬫柟娉曪紝姣忓鍔犱竴縐嶆秷鎭殑鍙渶瑕佸緙栧啓涓涓秷鎭畾涔夋枃浠惰屽凡錛屽伐浣滈噺鍑犱箮鍙互蹇界暐涓嶈銆傛墍鏈夌殑宸ヤ綔閲忛兘闆嗕腑鍦ㄧ紪璇戝櫒鐨勫紑鍙戜笂錛屽伐浣滈噺鏄竴涓父鏁癈錛屼笌娑堟伅鐨勬暟閲忔病鏈夊叧緋伙紱璐ㄩ噺淇濊瘉鏂歸潰涔熷彧闇瑕佸叧娉ㄧ紪璇戝櫒榪欎竴鐐癸紝涓嶄細鍥犱負澧炲姞鏂扮殑娑堟伅綾誨瀷鑰屽紩鍏ug銆?
渚?錛氬湪鍥句功綆$悊緋葷粺涓紝闇瑕佹敮鎸佸湪綆$悊鐣岄潰涓婂涔︾睄銆佸鐢熴佺彮綰х瓑鍚勭瀹炰綋榪涜綆$悊鎿嶄綔銆?
濡傛灉鎸変紶緇熺殑涓夊眰鏋舵瀯錛屼竴鑸渶瑕佸湪鍚庣紼嬪簭涓負姣忎竴縐嶅疄浣撳畾涔変竴涓被錛屽茍瀹氫箟鐩稿簲鐨勬柟娉曞疄鐜癈RUD鎿嶄綔錛屼笌涔嬬浉搴旂殑錛岃繕闇瑕佸湪鍓嶇欏甸潰涓負姣忎竴涓疄浣撶紪鍐欑浉搴旂殑綆$悊欏甸潰銆傝繖浜涘疄浣撶被鐨凜RUD鎿嶄綔閮芥槸澶у悓灝忓紓鐨勶紝浣嗙粏鑺傚張鍚勪笉鐩稿悓錛岃櫧鐒舵垜浠緢鎯沖鐢ㄦ煇浜涘叡鍚岀殑璁捐瀹炵幇錛屼絾OOP鎵鎻愪緵鐨勫皝瑁呫佺戶鎵褲佸鎬佺瓑鎶借薄鏈哄埗涓嶈凍浠ユ湁鏁堟崟鑾峰疄浣撲箣闂寸殑鍏辨э紝澶ч噺鐨勪唬鐮佽繕鏄繀欏繪斁鍦ㄥ瓙綾諱腑鏉ュ畬鎴愩傛瘮濡傦紝Student鍜孊ook瀹炰綋綾葷殑瀹炵幇闈炲父鐩鎬技錛屼絾鏄鏋滆閫氳繃OOP鐨勬柟寮忓幓鎶借薄瀹冧滑鐨勫叡鎬э紝寰楀嚭鐨勭粨鏋滃鍗婃槸Entity榪欐牱鐨勫ぇ鑰岀┖鐨勫熀綾伙紝寰堥毦璧峰埌澶嶇敤鐨勬晥鏋溿?
鍏跺疄錛屼笉鍚屽疄浣撲箣闂寸殑鍏辨ц繕鏄湪浜庡畠浠叿鏈夌浉鍚岀殑棰嗗煙璇箟錛屾瘮濡傦細瀹炰綋鍏鋒湁灞炴э紝灞炴у叿鏈夌被鍨嬶紝灞炴у叿鏈夊彇鍊艱寖鍥達紝灞炴у叿鏈夊彲璇誨彇銆佸彲緙栬緫絳夎闂睘鎬э紝瀹炰綋涔嬮棿鏈夊叧鑱斿叧緋葷瓑銆侺OP鏂規硶姝f槸鐩存帴闈㈠悜榪欑棰嗗煙璇箟鐨勩傞噰鐢↙OP鏂規硶錛屾垜浠茍涓嶉渶瑕佷負姣忎竴涓疄浣撶被鍗曠嫭緙栧啓CRUD鏂規硶錛屼篃涓嶉渶瑕佸崟鐙紪鍐欑鐞嗛〉闈紝鍙渶瑕佸畾涔変竴縐岲SL騫跺疄鐜板叾緙栬瘧鍣紱鐒跺悗錛岀敤DSL澹版槑寮忓湴緙栧啓瀹炰綋鎻忚堪鏂囦歡錛屽幓鎻忚堪瀹炰綋鐨勫睘鎬у垪琛紝灞炴х殑綾誨瀷銆佸彇鍊艱寖鍥達紝灞炴ф墍鏀寔鐨勬搷浣滐紝灞炴т箣闂寸殑鍏崇郴鍜岀害鏉熸潯浠剁瓑錛涙渶鍚庯紝閫氳繃榪欎釜瀹炰綋鎻忚堪鏂囦歡鑷姩鐢熸垚鍚庣鐨勫疄浣撶被鍜屽墠绔鐞嗛〉闈€傞噰鐢↙OP錛屼笉璁哄墠鍚庣閲囩敤浣曠鎶鏈紝Java涔熷ソ錛孋#涔熷ソ錛孞SP涔熷ソ錛孉SP.NET涔熷ソ錛岄兘鍙互鑷姩鐢熸垚瀹冧滑鐨勪唬鐮併傞噰鐢↙OP鐨勫伐浣滈噺鍜岃川閲忛兘闆嗕腑鍦―SL鐨勮璁″拰緙栬瘧鍣ㄧ殑寮鍙戯紝涓庡疄浣撶殑鏁伴噺鏃犲叧錛屼篃灝辨槸璇達紝瓚婃槸搴炲ぇ鐨勭郴緇燂紝瀹炰綋綾昏秺澶氳秺鏄兘浣撶幇LOP鐨勪紭鍔褲?
閫氳繃涓婇潰涓や釜灝忎緥瀛愭垜浠彲浠ユ劅鍙楀埌錛孡OP鏄竴縐嶉潰鍚戦鍩熺殑錛岄珮搴﹀0鏄庡紡鐨勭紪紼嬫柟寮忥紝瀹冪殑鎶借薄緇村害涓庨鍩熸ā鍨嬬殑緇村害瀹屽叏涓鑷淬侺OP鑳借紼嬪簭鍛樹粠澶嶆潅鐨勫疄鐜扮粏鑺備腑瑙h劚鍑烘潵錛屾妸鍏蟲敞鐐歸泦涓湪闂鐨勬湰璐ㄤ笂錛屼粠鑰屾彁楂樼紪紼嬬殑鏁堢巼鍜岃川閲忋?
鎺ヤ笅鏉ョ殑闂鏄鏋滈渶瑕佷負鏌愰鍩熻璁SL錛屾垜浠槸搴旇鍙戞槑涓闂ㄧ被浼糞QL榪欐牱鐨勪笓鐢―SL鍛紝榪樻槸鐢╔ML鎴朣琛ㄨ揪寮忓幓瀹氫箟DSL鍛紵瀹冧滑鍚勬湁浣曚紭緙虹偣鍛紵
鎴戣涓洪噰鐢╔ML鎴朣琛ㄨ揪寮忓畾涔塂SL鐨勪紭鐐逛富瑕佹湁錛?) SQL銆乵ake file銆丆SS絳変笓鐢―SL閮藉彧鑳介潰鍚戝悇鑷殑棰嗗煙錛岃屼竴涓疄闄呯殑棰嗗煙闂閫氬父鏄法瓚婂涓鍩熺殑錛屾湁鏃舵垜浠渶瑕佸皢涓嶅悓棰嗗煙铻嶅悎鍦ㄤ竴璧鳳紝浣嗘槸鐢變簬鏅氳璦鐨勫垰鎬э紝澶氳璦铻嶅悎閫氬父浼氭槸涓浠墮潪甯稿洶闅劇殑浜嬫儏錛岃孹ML鍜孲琛ㄨ揪寮忚娉曠粨鏋勭殑鍗曚竴鎬у拰鈥滀唬鐮佸強鏁版嵁鈥濈殑鐗圭偣浣垮緱璺ㄩ鍩熻瀺鍚堟鏃犻殰紕嶃?) 鍦ㄤ負DSL寮鍙戠紪璇戝櫒鎴栬В閲婂櫒鐨勬柟闈紝浜岃呴毦搴︿笉鍚屻傚XML鍜孲琛ㄨ揪寮忓畾涔夌殑DSL榪涜璇硶鍒嗘瀽闈炲父綆鍗曪紝鐩告瘮涔嬩笅錛屽SQL榪欐牱鐨勪笓鐢―SL榪涜璇硶鍒嗘瀽錛岃櫧鐒跺彲浠ュ熷姪Lex銆乊acc銆丄NTLR絳変唬鐮佺敓鎴愬伐鍏鳳紝浣嗘葷殑鏉ヨ澶嶆潅搴﹁繕鏄鏄庢樉楂樹竴浜涖?
褰撶劧錛孹ML鍜孲琛ㄨ揪寮忕殑浼樼偣涔熸濂芥槸鍏剁己鐐癸紝鐢變簬XML鍜孲琛ㄨ揪寮忕殑璇硶褰㈠紡鏄浐瀹氱殑錛屼笉鑳藉儚涓撶敤DSL閭f牱鑷敱鍦拌璁¤娉曘傛墍浠ワ紝涓鑸潵璁蹭笓鐢―SL鐨勮娉曟樉寰楁洿鍔犵畝媧併傛崲鍙ヨ瘽璇達紝XML鍜孡isp鍏跺疄鏄湪璇硶鍜岃涔夐棿鍋氫簡涓涓氦鎹紝鐢ㄨ娉曠殑闄愬埗鎹㈡潵浜嗚涔夌殑鐏墊椿銆?
鎺ヤ笅鏉ユ垜浠戶緇帰璁―SL鐨勮В閲婃墽琛岄棶棰樸侱SL浠g爜鐨勮В閲婃墽琛屼竴鑸垎涓?縐嶅吀鍨嬬殑鏂瑰紡錛?) 閫氳繃涓撻棬鐨勮В閲婂櫒瑙i噴鎵ц錛?) 緙栬瘧鐢熸垚鍏朵粬璇█鐨勪唬鐮侊紝鍐嶉氳繃鍏朵粬璇█鐨勮В閲婂櫒瑙i噴鎵ц(鎴栫紪璇戣繍琛?錛?) 鑷В閲娿傛瘮濡傦紝絎?綾葷殑浠h〃鏄疭QL錛屼笂涓鑺備婦鐨勪袱涓緥瀛愰兘灞炰簬絎?綾伙紝鑰岀3綾昏嚜瑙i噴姝f槸Lisp鐨勭壒鑹層?
涓轟簡鐞嗚В鑷В閲婏紝鎴戜滑鍙互鍏堜粠鍐呴儴DSL鐨勮В閲婃墽琛岃璧楓傚唴閮―SL鏄寚宓屽叆鍦ㄥ涓昏璦涓殑DSL錛屾瘮濡傦紝Google Test鍗曞厓嫻嬭瘯妗嗘灦瀹氫箟浜嗕竴濂楀熀浜庢祦鐣呮帴鍙?Fluent Interface)鐨凜++鍗曞厓嫻嬭瘯DSL銆備粠璇箟鏋勯犵殑瑙掑害鐪嬶紝鍐呴儴DSL鐩存帴鍊熺敤瀹夸富璇█鐨勮娉曞畾涔変簡鑷繁鐨勯鍩熻涔夛紝鏄竴縐嶈娉曞拰璇箟瑙h︼紱浠庤В閲婃墽琛岀殑瑙掑害鐪嬶紝鍐呴儴DSL鏄殢瀹夸富璇█鐨勮В閲婂櫒鑰岃嚜鍔ㄨВ閲婄殑錛屼笉闇瑕佸儚澶栭儴DSL涓鏍峰紑鍙戜笓闂ㄧ殑瑙i噴鍣紝鍥犺屽疄鐜扮殑浠d環寰堜綆銆傚綋鐒訛紝騫朵笉鏄璁捐鍐呴儴DSL涓嶇敤鍏沖績浠諱綍鐨勮В閲婂疄鐜幫紝瀹為檯涓婏紝榪樻槸闇瑕佺啛鎮夊涓昏璦鐨勭壒鎬э紝騫跺埄鐢ㄨ鐗規т嬌寰桪SL鑳介殢鐫瀹夸富璇█鐨勮В閲婂櫒寰楀埌瑙i噴鎵ц銆?
Lisp鎷ユ湁寮哄ぇ鐨勮嚜瑙i噴鐗規э紝榪欏緱鐩婁簬鐙竴鏃犱簩鐨?strong>Lisp涔嬪櫒錛氬畯 (macro) C璇█涓篃鏈夊畯鐨勬蹇碉紝涓嶈繃Lisp鐨勫畯涓嶤璇█鐨勫畯瀹屽叏涓嶅悓錛孋璇█鐨勫畯鏄畝鍗曠殑瀛楃涓叉浛鎹€傛瘮濡傦紝涓嬮潰鐨勫畯瀹氫箟錛?pre>#define square(x) (x*x)
square(1+1)鐨勬湡鏈涚粨鏋滄槸4錛岃屽疄闄呬笂瀹冧細琚浛鎹㈡垚(1+1*1+1)錛岀粨鏋滄槸3銆傝繖涓緥瀛愯鏄庯紝C璇█鐨勫畯鍙湪棰勭紪璇戦樁孌佃繘琛岀畝鍗曠殑瀛楃涓叉浛鎹紝瀵圭▼搴忚娉曠粨鏋勭己涔忕悊瑙o紝闈炲父鑴嗗急銆侺isp鐨勫畯涓嶆槸綆鍗曠殑瀛楃涓叉浛鎹紝鑰屾槸涓濂楀畬鏁寸殑浠g爜鐢熸垚緋葷粺錛屽畠鏄湪璇硶瑙f瀽鐨勫熀紜涓婃妸Lisp浠g爜浠庝竴縐嶅艦寮忚漿鎹負鍙︿竴縐嶅艦寮忥紝鏈川涓婅搗鍒頒簡鏅氳璦緙栬瘧鍣ㄧ殑浣滅敤銆備笉鍚岀殑鏄紝鏅氱紪璇戝櫒鏄妸涓縐嶈璦鐨勪唬鐮佽漿鎹負鍙︿竴縐嶈璦鐨勪唬鐮侊紝姣斿錛孞ava緙栬瘧鍣ㄦ妸Java浠g爜杞崲鎴怞ava瀛楄妭鐮侊紱鑰孡isp瀹忕殑杈撳叆鍜岃緭鍑洪兘鏄疭琛ㄨ揪寮忥紝瀹冩湰璐ㄤ笂鏄妸涓縐岲SL杞崲涓哄彟涓縐岲SL銆備笅闈㈢殑渚嬪瓙鏄畯鐨勪竴涓吀鍨嬬敤娉曘?
渚?錛氬亣璁綥isp瑙i噴鍣ㄥ凡緇忓叿澶囪В閲婃墽琛岄潰鍚戣繃紼婦SL鐨勮兘鍔涳紝闇瑕佸疄鐜扮被浼糰nt鐨勮嚜鍔ㄥ寲鏋勫緩宸ュ叿銆?
鎴戜滑鍙互鍩轟簬瀹忔瀯寤轟竴闂ㄧ被ant鐨凞SL錛屽畯鐨勪綔鐢ㄦ槸鎶婄被ant DSL閫氳繃瀹忓睍寮鍙樻垚闈㈠悜榪囩▼鐨凞SL錛屾渶鍚庤Lisp瑙i噴鍣ㄦ墍瑙i噴鎵ц銆傝繖鏍風敤Lisp緙栧啓鐨刟nt DSL灝變笉闇瑕佽緙栬瘧涓哄叾浠栬璦錛屼篃涓嶉渶瑕佸儚XML鐨刟nt涓鏍蜂緷璧栦簬涓撻棬鐨勮В閲婂櫒浜嗐?
褰撶劧錛屽拰寮鍙戜笓闂ㄧ殑瑙i噴鍣?緙栬瘧鍣ㄧ浉姣旓紝Lisp鐨勫畯涔熷茍闈炴病鏈夌己鐐癸紝瀹忛毦浠ョ悊瑙o紝寮鍙戝拰璋冭瘯鏇村姞鍥伴毦銆傚埌搴曟槸寮鍙戜笓闂ㄧ殑瑙i噴鍣?緙栬瘧鍣ㄨ繕鏄洿鎺ラ噰鐢ㄥ畯搴旇瑙嗗叿浣撴儏鍐佃屽畾銆?
Lisp閲囩敤鍗曚竴鐨凷琛ㄨ揪寮忚娉曡〃杈句笉鍚岀殑璇箟錛屽疄鐜頒簡璇硶鍜岃涔夎В鑰︺傝繖浣垮緱Lisp鍏鋒湁寮哄ぇ鐨勮涔夋瀯閫犺兘鍔涳紝鎿呴暱浜庢瀯閫燚SL瀹炵幇闈㈠悜璇█緙栫▼錛岃屽畯浣垮緱Lisp鍏鋒湁鑷В閲婅兘鍔涳紝璁╀笉鍚孌SL涔嬮棿鐨勮漿鎹㈡父鍒冩湁浣欍傝繘鍏isp鐨勪笘鐣屽簲褰撲粠鐞嗚В闈㈠悜璇█緙栫▼鍏ラ棬錛岃繖鏄疞isp涔嬮亾錛岃屽嚱鏁板紡緙栫▼鍜屽畯鐨嗕負Lisp涔嬪櫒錛屼互閬撻┉鍣ㄦ柟涓烘閫斻?
鏈枃鏄垜瀛︿範Lisp鐨勪竴涓葷粨錛屼篃鏄啓緇欐湁鍏磋叮瀛︿範Lisp鐨勭▼搴忓憳鐨勫叆闂ㄨ祫鏂欍傚繀欏昏鏄庯紝鎴戣繕鏄竴涓爣鍑嗙殑Lisp鍒濆鑰咃紝鍑犱箮娌℃湁鍐欒繃鍍忔牱鐨凩isp紼嬪簭錛屾枃涓殑閿欒鍜屼笉瓚沖湪鎵闅懼厤錛屽笇鏈涜鑰呮壒璇勬寚姝o紝鎰熻阿錛?
Why Lisp macros are cool, a Perl perspective
<func name='gcd' return_type='int'>
<params>
<a type='int'/>
<b type='int'/>
</params>
<body>
<if>
<equals>
<a/>
<int>0</int>
</equals>
</if>
<then>
<return><b/></return>
</then>
<else>
<return>
<gcd>
<modulo><b/><a/></modulo>
<a/>
</gcd>
</return>
</else>
</body>
</func>
<class name="Computer">
<field access="private" type="MainBoard" name="main-board" />
<field access="private" type="CPU" name="cpu" />
<field access="private" type="Memory" name="memory" />
<method access="public" return_type="boolean" name="powerOn" />
<params>...</params>
<body>...</body>
</method>
<method access="public" return_type="boolean" name="powerOff" />
<params>...</params>
<body>...</body>
</method>
</class>
<sql>
<select>
<column name="employees.id" />
<column name="bonus.amount" />
</select>
<from>
<table name="employees" />
<table name="bonus" />
</from>
<where>
<equals>
<column name="employees.id" />
<column name="bonus.employee_id" />
</equals>
</where>
</sql>
Lisp涔嬪櫒
鎬葷粨
鍚庤
鍙傝?/h5>
鍦ㄥ寘鍚腑娣誨姞#include <memory>鍗沖彲
mysql++鐗堟湰3.1.0
榪涘叆mysql++鐩綍,鎵ц浠ヤ笅鎸囦護鐢熸垚libmysqlpp.a
ar rcu libmysqlpp.a mysqlpp_beemutex.o mysqlpp_cmdline.o mysqlpp_connection.o mysqlpp_cpool.o mysqlpp_datetime.o mysqlpp_dbdriver.o mysqlpp_field_names.o mysqlpp_field_types.o mysqlpp_manip.o mysqlpp_myset.o mysqlpp_mysql++.o mysqlpp_mystring.o mysqlpp_null.o mysqlpp_options.o mysqlpp_qparms.o mysqlpp_query.o mysqlpp_result.o mysqlpp_row.o mysqlpp_scopedconnection.o mysqlpp_sql_buffer.o mysqlpp_sqlstream.o mysqlpp_ssqls2.o mysqlpp_stadapter.o mysqlpp_tcp_connection.o mysqlpp_transaction.o mysqlpp_type_info.o mysqlpp_uds_connection.o mysqlpp_utility.o mysqlpp_vallist.o mysqlpp_wnp_connection.o ssqls2parse_parsev2.o
鐒跺悗mv鍒皍sr/local/lib,閲嶆柊閾炬帴鏈嶅姟鍣ㄥ嵆鍙?/p>
[root@localhost bin]# ldd wkcenter
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./wkcenter)
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./wkcenter)
./wkcenter: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.9' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.7' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.8' not found (required by ./wkcenter)
./wkcenter: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./wkcenter)
linux-gate.so.1 => (0xffffe000)
liblog4cpp.so.4 => not found
libprotobuf.so.7 => not found
libboost_filesystem.so.1.48.0 => not found
libboost_system.so.1.48.0 => not found
libboost_thread.so.1.48.0 => not found
libboost_program_options.so.1.48.0 => not found
libunwind-x86.so.7 => not found
libluabind.so.0.9.0 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x008ae000)
libm.so.6 => /lib/libm.so.6 (0x0044b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00476000)
libc.so.6 => /lib/libc.so.6 (0x002c1000)
libpthread.so.0 => /lib/libpthread.so.0 (0x0041d000)
librt.so.1 => /lib/librt.so.1 (0x00440000)
/lib/ld-linux.so.2 (0x002a2000)
涓婇潰綰㈠瓧閮ㄥ垎琛ㄧずglibc鍙奼libcxx搴撲緷璧栦笉姝g‘. 鏈漢浣跨敤鐨凩inux緙栬瘧鐗堟湰涓篗int 11(鍩轟簬Ubuntu), 涓鑸琔buntu鍙戣鐗堢殑glibc閰嶅闈炲父楂? 浣嗘槸涓婃枃涓殑鍙戝竷鐨凩inux鐗堟湰涓篊entOS 5.8
浣跨敤/lib/libc.so.6 鏌ョ湅libc鐗堟湰涓?.5, 榪滆繙浣庝簬寮鍙戠幆澧冪殑2.11
GNU C Library stable release version 2.5, by Roland McGrath et al.
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-51).
Compiled on a Linux 2.6.9 system on 2012-02-21.
Available extensions:
The C stubs add-on version 2.1.2.
crypt add-on version 2.1 by Michael Glad and others
GNU Libidn by Simon Josefsson
GNU libio by Per Bothner
NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
Native POSIX Threads Library by Ulrich Drepper et al
BIND-8.2.3-T5B
RT using linux kernel aio
Thread-local storage support included.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
鐢變簬Linux鎿嶄綔緋葷粺鐨勭壒鏈塭lf鍔犺澆欏哄簭. (鍙互鍙傝?a >姝ゆ枃). 铏界劧鍙互寰堝ぇ紼嬪害涓婅В鍐砏indows鏃╂湡鐗堟湰鐨刣ll hell闂, 浣嗘槸緇欓儴緗插甫鏉ヤ簡寰堝ぇ闅懼害
涓鑸父瑙佺殑瑙e喅鏂規硶鏄? 鎵懼埌涓涓笌鐩爣Linux鐗堟湰鍙奼libc鐗堟湰涓鑷寸殑Linux, 灝嗕唬鐮佸強渚濊禆鍖呮斁鍦ㄤ箣涓婄紪璇? 瀹屾垚鍚庡啀鍙戝竷.榪欑鏂規硶涓嶭inux涓嬪父瑙佽蔣浠跺畨瑁呮柟娉曠被浼? 浣嗘槸瀵逛簬鍟嗙敤鏈嶅姟鍣ㄩ儴緗叉楠ゆ潵璇存湭鍏嶇箒鐞? 瀹夊叏鎬т綆.
榪樻湁涓縐嶆柟娉?浣跨敤闈欐侀摼鎺? 灝嗘墍鏈夊彲鎵ц鏂囦歡鏂囦歡渚濊禆鐨勯潤鎬佸簱, 緋葷粺搴?鍏ㄩ儴闈欐侀摼鎺ュ埌鍙墽琛屾枃浠朵腑,鍙互涓嬈℃цВ鍐寵繖涓棶棰?/p>
姝ラ:
1. 鍦╣cc閾炬帴鍛戒護琛屼腑娣誨姞-static -static-libgcc -static-libstdc++
2. 灝嗙涓夋柟渚濊禆搴撴墦寮闈欐侀摼鎺ュ紑鍏? 灝嗗師鏉ラ摼鎺?so鐨勫簱,鍏ㄦ敼涓洪摼鎺?a
3. gcc瀵歸摼鎺ュ簱欏哄簭寰堟晱鎰? 閾炬帴搴撻『搴忛渶瑕佹寜鐓т粠鍓嶈嚦鍚庝負: 欏圭洰浜х敓鐨勯潤鎬佸簱 > 絎笁鏂瑰簱闈欐佸簱 > 緋葷粺闈欐佸簱
4. 閾炬帴鏃? 鑻ユ湁鏈В鍐崇殑symbol, 鍙互灝濊瘯鍦ㄦ渶鍚庢坊鍔?lpthread鍙?lrt瑙e喅
鍦ㄥ彂甯冪増鏈琇inux涓婅繍琛屽彲鑳介亣鍒扮殑闂:
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
瑙e喅鏂規硶: 鎵ц涔嬪墠榪愯export LC_ALL="C"
鍙﹀涓縐嶈幏鍙栨柟娉曟槸table.getn(obj), 浣嗘槸榪欎釜鏂規硶宸茬粡鏍囪涓哄簾闄や簡, 灝介噺浣跨敤閫氱敤涓旂畝媧佺殑#鎿嶄綔絎?/p>
浣跨敤lua api瀹炵幇姝ゅ姛鑳藉氨闇瑕佺敤鍒發ua_objlen( ),浣嗘槸榪欎釜鍔熻兘鏈湪luabind涓彁渚?鎵浠ユ垜浠『鎵嬫坊鍔犱竴涓?/p>
棣栧厛鎵懼埌luabind婧愮爜鐨刼bject.hpp涓彇瀵硅薄綾誨瀷鐨則ype鍑芥暟,鍦ㄥ叾涓嬫坊鍔犱互涓嬩唬鐮?/p>
閲嶆柊緙栬瘧浣犵殑浠g爜, 灝卞彲浠ヨ繖鏍蜂嬌鐢╨uabind::obj_size( obj ) 鑾峰彇瀵硅薄澶у皬浜?img src ="http://m.shnenglu.com/sunicdavy/aggbug/169178.html" width = "1" height = "1" />1: template<class ValueWrapper>2: inline int obj_size(ValueWrapper const& value)3: {4: lua_State* interpreter = value_wrapper_traits<ValueWrapper>::interpreter(5: value6: );7:8: value_wrapper_traits<ValueWrapper>::unwrap(interpreter, value);9: detail::stack_pop pop(interpreter, 1);10: return lua_objlen(interpreter, -1);11: }
1: void ScriptManagedChannel::OnServiceInitialize()
2: { 3: try
4: { 5: mThread = lua_newthread( GScriptScriptContext->GetVM() ); 6: 7: luabind::resume_function<void>( mThread, "ScriptMain", this );
8: 9: Resume(); 10: }11: catch (std::exception& e)
12: {13: const char* ErrorMsg = lua_tostring( GScriptScriptContext->GetVM(), -1 );
14: printf("%s\n", e.what() );
15: } 16: 17: 18: } 19: 20: void ScriptManagedChannel::Resume( )
21: {22: luabind::resume<void>( mThread );
23: } 24: 25: void ScriptManagedChannel::StopTest( )
26: { 27: lua_yield( mThread, 0 ); 28: } 29: 30: 浠g爜涓? mThread綾誨瀷涓簂ua_State*綾誨瀷
GScriptScriptContext->GetVM()鏄姞杞戒簡浠g爜鐨刲ua_State*
StopTest涓烘敞鍐屼負ScriptManagedChannel綾繪垚鍛樺嚱鏁板埌lua涓殑瀹氫箟
鎺ヤ笅鏉ョ湅lua绔殑嫻嬭瘯浠g爜:
1: function ScriptMain( Channel )
2: 3: 4: for i = 1, 5 do
5: 6: print("done", i)
7: 8: Channel:StopTest( ) 9: 10: 11: 12: end
13: end鍒氬紑濮?鍦ㄦ祴璇曚唬鐮佹椂, lua涓湁涓墜璇岄犳垚鐨勯敊璇? 瀵艱嚧C++浠g爜榪愯鍒扮7琛屾椂寮瑰嚭assert
浣嶄簬:luabind-0.9.1\luabind\detail\call_function.hpp 絎?64琛?瀵瑰簲浠ヤ笅浠g爜絎?3琛?/p>
1: ~proxy_function_void_caller() 2: {3: if (m_called) return;
4: 5: m_called = true; 6: lua_State* L = m_state; 7: 8: int top = lua_gettop(L);
9: 10: push_args_from_tuple<1>::apply(L, m_args);11: if (m_fun(L, boost::tuples::length<Tuple>::value, 0))
12: { 13: assert(lua_gettop(L) == top - m_params + 1); 14: 15: NO_EXCEPTIONS16: throw luabind::error(L);
17: #else
18: error_callback_fun e = get_error_callback();19: if (e) e(L);
20: 21: assert(0 && "the lua function threw an error and exceptions are disabled."
22: " If you want to handle the error you can use luabind::set_error_callback()");
23: std::terminate();24: #endif
25: }26: // pops the return values from the function call
27: stack_pop pop(L, lua_gettop(L) - top + m_params); 28: }11琛屼唬鐮佷腑璋冪敤鐨勬槸lua_resume, 榪斿洖鐨勬槸榪愯閿欒, 浣嗘槸琚?3琛岀殑assert鎸′綇浜? 鏃犳硶閫氳繃絎?6琛屾姏鍑哄紓甯歌澶栭潰鎹曡幏.
鍥犳,灝濊瘯娉ㄩ噴絎?3琛?/strong>, 鍐嶆祴璇? 鍙互鍦╨ua鎶涘嚭閿欒鍚? 鍦ㄦ爤欏舵崟鑾峰埌coroutine鍑芥暟resume鏃舵姤鍑虹殑閿欒淇℃伅.闂瑙e喅
瀵逛簬lua鐨刢oroutine, 緗戜笂璧勬枡涓嶅, 榪欓噷鏈変竴綃囨瘮杈冭緇嗙殑浠g爜
鎴戞瘮杈冪枒鎯戠殑鏄? 鏈夋病鏈夊繀瑕佸皢浠g爜鍦╠ofile鎴栬卍obuffer鏃? 蹇呴』浼犲叆newthread鍑虹殑state? 濡傛灉榪樻槸浼犲叆鍘熷鐨剆tate浼氭湁浠涔堝獎鍝?
嬈㈣繋鍚勪綅鏈夋緇忛獙鐨勮璁?/p>