锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
]]>
]]>
鏍囬: C++ 浠g爜縐繪瑕佺偣
浣滆? 鍙墮铏?br />鏃ユ湡: 2010.09.06
--------------------------------------------------------------------------------
1. 鍒嗗眰璁捐
闅旂騫沖彴鐩稿叧鐨勪唬鐮? 灝卞儚鍙祴璇曟т竴鏍? 鍙Щ妞嶆т篃瑕佷粠璁捐鎶撹搗銆備竴鑸潵璇? 鏈涓?br /> 灞傚拰鏈涓嬪眰閮戒笉鍏鋒湁鑹ソ鐨勫彲縐繪鎬?
1). 鏈涓婂眰鏄?GUI, 澶у鏁?GUI 閮戒笉鏄法騫沖彴鐨? 濡? Win32 SDK 鍜?MFC
2). 鏈涓嬪眰鏄搷浣滅郴緇?API, 澶ч儴鍒嗘搷浣滅郴緇?API 閮芥槸涓撶敤鐨?/p>
濡傛灉榪欎袱灞傜殑浠g爜鏁e竷鍦ㄦ暣涓蔣浠朵腑, 閭d箞榪欎釜杞歡鐨勫彲妞嶆у皢闈炲父鐨勫樊, 榪欐槸涓嶈█鑷?br /> 鏄庣殑銆傞偅涔堝浣曢伩鍏嶈繖縐嶆儏鍐靛憿? 褰撶劧鏄垎灞傝璁′簡:
1). 鏈搴曞眰閲囩敤 Adapter 妯″紡, 鎶婁笉鍚屾搷浣滅郴緇熺殑 API 灝佽鎴愪竴濂楃粺涓鐨勬帴鍙?濡?
KYLib 搴?, 鑷充簬灝佽鎴愮被榪樻槸灝佽鎴愬嚱鏁? 瑕佺湅瀹為檯鎯呭喌鑰屽畾銆傚鏋滃湪寮鍙戠
涓涓鉤鍙版椂灝遍噰鐢?KYLib, 鍙互澶уぇ鍑忓皯縐繪鐨勫伐浣滈噺銆?/p>
2). 鏈涓婂眰閲囩敤鍒嗙鐣岄潰琛ㄧ幇涓庡唴閮ㄩ昏緫浠g爜鐨勬ā寮? 鎶婂ぇ閮ㄥ垎浠g爜鏀懼埌鍐呴儴閫昏緫閲?br /> 闈? 鐣岄潰浠呬粎鏄樉紺哄拰鎺ユ敹杈撳叆, 鍗充嬌瑕佹崲涓濂?GUI, 宸ヤ綔閲忎篃涓嶅ぇ銆傝繖鍚屾椂涔?br /> 鏄彁楂樺彲嫻嬭瘯鎬х殑鎵嬫涔嬩竴, 褰撶劧榪樻湁鍏跺畠涓浜涢檮鍔犲ソ澶勩傛墍浠ュ嵆浣夸綘閲囩敤 QT
鎴栬?GTK+ 絳夎法騫沖彴鐨?GUI 璁捐杞歡鐣岄潰, 鍒嗙鐣岄潰琛ㄧ幇涓庡唴閮ㄩ昏緫涔熸槸闈炲父
鏈夌敤鐨勩?/p>
2. 娉ㄦ剰騫沖彴鐨勭壒鎬?br /> a. 鐩綍鍒嗛殧絎? 鍦╓indows涓嬬敤 '\\', 鍦↙inux涓嬬敤 '/'銆?/p>
b. 鏂囨湰鏂囦歡鎹㈣絎? 鍦╓indows涓嬬敤 "\r\n", 鍦↙inux涓嬬敤 '\n'銆?/p>
c. 鍦?Windows 涓枃浠跺悕涓嶅尯鍒嗗ぇ灝忓啓瀛楁瘝, 鑰屽湪 Linux 涓垯鍖哄垎澶у皬鍐欏瓧姣嶃?/p>
d. 鍦?Windows 涓嚎紼嬪彲浠?suspend 鍜?resume, 鑰屽湪 Linux 涓垯涓嶅厑璁告鎿嶄綔銆?/p>
e. 鍦?Windows 鐨勫姩鎬佸簱涓? 闄ら潪鏄庣‘鎸囨槑涓?export 鐨勫嚱鏁板, 鍏跺畠鍑芥暟瀵瑰閮芥槸涓?br /> 鍙鐨勩?/p>
f. 鍦?Linux 鐨勫叡浜簱涓? 鎵鏈夐潪 static 鐨勫叏灞鍙橀噺鍜屽嚱鏁? 瀵瑰鍏ㄩ儴鏄彲瑙佺殑銆傝繖
瑕佺壒鍒皬蹇? 鍚屽悕鍑芥暟寮曡搗鐨勯棶棰? 璁╀綘鏌ヤ笂涓ゅぉ涔熶笉涓鴻繃銆?/p>
g. 鍦?Linux 鐨勫叡浜簱涓? 濡傛灉鎯崇粦瀹氬叡浜簱閲岀殑鍏ㄥ眬絎﹀彿(鍙橀噺, 鍑芥暟鍜岀被絳夌瓑), 鍒?br /> 鍦ㄩ摼鎺ュ叡浜簱鐨勬椂鍊? 娣誨姞 gcc 閫夐」 -Wl,-Bsymbolic 鍗沖彲銆?/p>
h. 鍦?Linux 鐨勫叡浜簱涓? 濡傛灉鍏變韓搴撳瓨鍙栦富紼嬪簭閲屽畾涔夌殑鍏ㄥ眬絎﹀彿, 閾炬帴涓葷▼搴忕殑鏃?br /> 鍊? 浣跨敤鍙傛暟 -Wl,--export-dynamic 鍗沖彲銆?/p>
3. 鏈濂戒笉瑕佷嬌鐢ㄧ紪璇戝櫒鐗規(guī)湁鐨勭壒鎬?br /> a. 鍍忓湪 VC 閲? 浣犺瀹炵幇綰跨▼灞閮ㄥ瓨鍌? 鍦ㄥ彉閲忓墠鍔犱竴涓?__declspec( thread ) 灝辮
浜? 鐒惰屽敖綆″湪 pthread 閲屾湁綾諱技鐨勫姛鑳? 鍗翠笉鑳芥寜榪欑鏂瑰紡瀹炵幇, 鎵浠ユ棤娉曠Щ妞?br /> 鍒?Linux 涓嬨?/p>
b. 鍚屾牱 gcc 涔熸湁寰堝鎵╁睍, 鏄湪 VC 鎴栬呭叾瀹冪紪璇戝櫒閲屾墍娌℃湁鐨勩傚緙栬瘧鎴愬綰跨▼瀹?br /> 鍏ㄧ殑閫夐」 -pthread, 姝ら夐」鍦ㄧ紪璇戞簮紼嬪簭鍜岄摼鎺ユ椂浣跨敤銆?/p>
4. 鏁版嵁綾誨瀷宸埆
a. 鍦?VC 涓?4浣嶆暣鍨嬫槸 __int64, 鑰屽湪 Linux 涓槸 int64_t銆?/p>
b. 鍦?VC 涓嚱鏁版寚閽堥粯璁ゆ儏鍐典笅鍙互鐩存帴璧嬪肩粰 void* 綾誨瀷鍙橀噺, 鑰屽湪 Linux 涓垯涓?br /> 鍏佽鐩存帴璧嬪? 蹇呴』浣跨敤 (void*) 寮哄埗杞崲銆?/p>
c. 鍦?Windows 涓殑鍘熷瓙閿佺浉鍏沖嚱鏁?InterlockXXX 涓殑鍙傛暟綾誨瀷鏄?long*,
鑰屽湪 Linux 涓弬鏁扮被鍨嬫槸 int*銆?/p>
5. 璋冪敤澶栭儴搴?闈欐佸簱鍜屽姩鎬佸簱)宸紓
a. 鍦?VC 涓皟鐢ㄥ閮ㄥ簱鏈?.lib 鏀寔, 鑻ユ槸鍔ㄦ佸簱鍒欑洿鎺ラ氳繃 .lib 鍏寵仈銆?/p>
b. 鍦?Linux 涓皟鐢ㄩ潤鎬佸簱涓?.a 鏂囦歡, 搴撲箣闂寸殑鍏堝悗欏哄簭闈炲父閲嶈, 濡?libKYLib.a
鍜?libkylin.a, 涓?kylin 渚濊禆 KYLib, 鍒欏湪宸ョ▼涓姞杞藉簱鐨勯『搴忓繀欏諱負(fù): 鍏堝姞杞?br /> libkylin.a, 鍐嶅姞杞?libKYLib.a銆?/p>
c. 鍦?Linux 涓皟鐢ㄥ姩鎬佸簱涓?.so 鏂囦歡, 濡傛灉鏈夊ソ鍑犱釜搴? 瀹冧滑涔嬮棿鏈変竴浜涗緷璧栧叧緋葷殑
璇? 渚嬪 X 渚濊禆 Y, 閭d箞浣犲氨瑕佸厛鍔犺澆閭d簺琚緷璧栫殑 Y, 鐒跺悗鍔犺澆 X銆?/p>
d. 鍦?Linux 涓販鍚堣皟鐢ㄩ潤鎬佸簱鍜屽姩鎬佸簱, 濡備嬌鐢?libKYLib.a 鍜?libswgci32c.so, 涓?br /> libswgci32c.so 涓嬌鐢ㄤ簡 libKYLib.a, 鍒欏湪鍔犺澆搴撴椂蹇呴』鍏堝姞杞?libKYLib.a, 鐒?br /> 鍚庡啀鍔犺澆 libswgci32c.so銆?/p>
6. 鍔犺澆鍔ㄦ佸簱鏃舵煡鎵捐礬寰勯『搴忕殑宸紓
a. Windows 搴撴悳绱㈣礬寰勫拰欏哄簭
1). 搴旂敤紼嬪簭鐩綍
2). 褰撳墠宸ヤ綔鐩綍
3). 緋葷粺鐩綍 (%systemroot%, %systemroot%\system 鍜?%systemroot%\system32),
濡? C:\WINNT\, C:\WINNT\system, C:\WINNT\system32
4). 璺緞鍙橀噺 (緋葷粺鐨勭幆澧冨彉閲?Path)
b. Linux 搴撴悳绱㈣礬寰勫拰欏哄簭
1). 閾炬帴鏃舵寚瀹氱殑璺緞, 濡? -Wl,-rpath=./ 閫夐」琛ㄧず緙栬瘧鏃?ld 璺緞
2). 鐜鍙橀噺 LD_LIBRARY_PATH 鎸囨槑鐨勮礬寰?br /> 3). /etc/ld.so.cache涓殑鍑芥暟搴撳垪琛?br /> 4). /lib鐩綍, 鐒跺悗/usr/lib
5). 褰撳墠宸ヤ綔鐩綍
7. 鍔ㄦ佸簱鍏ュ彛鍑芥暟鐨勫樊寮?br /> a. Windows 涓湁 DllMain 鍏ュ彛鍑芥暟, 鑰?Linux 涓垯娌℃湁銆?/p>
b. Linux 涓湁鐗規(guī)畩鍑芥暟 _init 鍜?_fini, 涓昏鏄垎鍒敤鏉ュ垵濮嬪寲鍑芥暟搴撳拰鍏抽棴鐨勬椂鍊?br /> 鍋氫竴浜涘繀瑕佺殑澶勭悊, 鎴戜滑鍙互鎶婅嚜宸辮涓洪渶瑕佺殑浠g爜鏀懼埌榪欎袱涓嚱鏁伴噷闈? 瀹冧滑鍒嗗埆
鍦ㄥ嚱鏁板簱琚姞杞藉拰閲婃斁鐨勬椂鍊欒鎵ц銆傚叿浣撹, 濡傛灉涓涓嚱鏁板簱閲岄潰鏈変竴涓悕瀛椾負(fù)
"_init" 鐨勫嚱鏁拌緭鍑? 閭d箞鍦ㄧ涓嬈¢氳繃 dlopen() 鍑芥暟鎵撳紑榪欎釜鍑芥暟搴? 鎴栬呭彧鏄?br /> 綆鍗曠殑浣滀負(fù)鍏變韓鍑芥暟搴撹鎵撳紑鐨勬椂鍊? _init 鍑芥暟琚嚜鍔ㄨ皟鐢ㄦ墽琛屻備笌涔嬬浉瀵瑰簲鐨勫氨
鏄?_fini 鍑芥暟, 褰撲竴涓▼搴忚皟鐢?dlclose() 鍘婚噴鏀懼榪欎釜鍑芥暟搴撶殑寮曠敤鐨勬椂鍊? 濡?br /> 鏋滆鍑芥暟搴撶殑琚紩鐢ㄨ鏁板櫒涓?0 浜? 鎴栬呰繖涓嚱鏁板簱鏄綔涓轟竴鑸殑鍏變韓鍑芥暟搴撹浣?br /> 鐢ㄨ屼嬌鐢ㄥ畠鐨勭▼搴忔甯擱鍑虹殑鏃跺? _fini灝變細(xì)琚皟鐢ㄦ墽琛屻?/p>
C璇█瀹氫箟瀹冧滑鐨勫師鍨嬪涓嬶細(xì)
void _init(void);
void _fini(void);
褰撲嬌鐢ㄤ綘鑷繁鐨?_init 鍜?_fini 鍑芥暟鏃? 浼?xì)鍑虹幇鍛藉悕鍐步H? 灝變細(xì)寰楀埌涓涓?br /> "multiple-definition" 鐨勯敊璇? 緙栬瘧鍣ㄦ彁紺哄凡緇忓瓨鍦ㄨ繖涓悕瀛? 鍙互閫氳繃鍑犵鏂瑰紡
鏉ヨВ鍐籌細(xì)
1). 鑷畾涔?init 鍑芥暟鍚嶅瓧, 姣斿 myinit 鐢?-Wl, 閫夐」緇?ld 浼犻掓鍚嶅瓧:
gcc ... -Wl,-init=myinit
2). 褰?GCC 緙栬瘧婧愮▼搴忔椂, 鍙互浣跨敤閫夐」 -nostartfiles 鏉ヤ嬌鍏變韓搴撲笉涓庣郴緇?br /> 鍚姩鏂囦歡涓璧風(fēng)紪璇?br /> gcc ... -nostartfiles
3). 浣跨敤涓婇潰鐨勫嚱鏁版垨 GCC 鐨?-nostartfiles 閫夐」騫朵笉鏄緢濂界殑涔?fàn)鎯? 鍥犱負(fù)榪?br /> 鍙兘浼?xì)漶旂敓涓浜涙剰澶栫殑緇撴灉銆傜浉鍙? 搴撳簲璇ヤ嬌鐢?br /> __attribute__((constructor)) 鍜?__attribute__((destructor)) 鍑芥暟灞?br /> 鎬ф潵杈撳嚭瀹冪殑鏋勯犲嚱鏁板拰鏋愭瀯鍑芥暟銆傚涓嬫墍紺?
void __attribute__((constructor)) x_init(void);
void __attribute__((destructor)) x_fini(void);
鏋勯犲嚱鏁頒細(xì)鍦╠lopen()榪斿洖鍓嶆垨搴撹瑁呰澆鏃惰皟鐢?
鏋愭瀯鍑芥暟浼?xì)鍦q欐牱鍑犵鎯呭喌涓嬭璋冪敤: dlclose() 榪斿洖鍓? 鎴?main() 榪斿洖
鍚? 鎴栬杞藉簱榪囩▼涓?exit() 琚皟鐢ㄦ椂銆?/p>
c. Linux 涓殑鍒濆鍖栧拰閲婃斁鍑芥暟涓嶅緩璁嬌鐢ㄣ?/p>
--------------------------------------------------------------------------------