今天在把linux下做的ipmsg移植到windows過(guò)程中,因?yàn)榘艘粋€(gè)開(kāi)源庫(kù)SimpleSocket,而這個(gè)庫(kù)又引用了winsock2,沒(méi)太注意就寫(xiě)下了下面的makefile:

g++ -o tt tt.o
-lws2_32 -lclsocketd
結(jié)果報(bào)出了N多丑陋的undefined reference..之后嘗試將-lws2_32和-lclsocketd交換位置后,編譯通過(guò)。
上網(wǎng)查了下,發(fā)現(xiàn)gcc編譯時(shí)依賴庫(kù)的順序是很重要的。比如說(shuō),liba.a依賴于libb.a,則必須寫(xiě)成-la -lb,似乎感覺(jué)這種順序很奇怪。另外參考網(wǎng)上
http://www.shnenglu.com/findingworld/archive/2008/11/09/66408.html的內(nèi)容,在庫(kù)比較多依賴關(guān)系比較復(fù)雜或者相互依賴或者自己不清楚的情況下,可以采取下面2種辦法:
1、-la -lb -la,丑陋,但是有效。
2、gcc有這樣的選項(xiàng),-Xlinker,寫(xiě)成如下格式可以強(qiáng)制gcc重復(fù)查找依賴庫(kù):

g++ -o tt tt.o -Xlinker "-("
-lws2_32 -lclsocketd "-)"
這樣在括號(hào)中的庫(kù)的依賴關(guān)系就不需要你操心啦,雖然會(huì)延長(zhǎng)鏈接時(shí)間。不過(guò)本人在實(shí)際使用過(guò)程中,g++認(rèn)不出"-)",不加也可以鏈接成功。
posted on 2010-05-18 02:01
RayRiver 閱讀(7541)
評(píng)論(1) 編輯 收藏 引用 所屬分類(lèi):
C/C++ 、
Unix/Linux 、
Windows