g++ -o tt tt.o -lws2_32 -lclsocketd結果報出了N多丑陋的undefined reference..之后嘗試將-lws2_32和-lclsocketd交換位置后,編譯通過。
上網查了下,發現gcc編譯時依賴庫的順序是很重要的。比如說,liba.a依賴于libb.a,則必須寫成-la -lb,似乎感覺這種順序很奇怪。另外參考網上http://m.shnenglu.com/findingworld/archive/2008/11/09/66408.html的內容,在庫比較多依賴關系比較復雜或者相互依賴或者自己不清楚的情況下,可以采取下面2種辦法:
1、-la -lb -la,丑陋,但是有效。
2、gcc有這樣的選項,-Xlinker,寫成如下格式可以強制gcc重復查找依賴庫:
g++ -o tt tt.o -Xlinker "-(" -lws2_32 -lclsocketd "-)"這樣在括號中的庫的依賴關系就不需要你操心啦,雖然會延長鏈接時間。不過本人在實際使用過程中,g++認不出"-)",不加也可以鏈接成功。


