今天在把linux下做的ipmsg移植到windows過程中,因為包含了一個開源庫SimpleSocket,而這個庫又引用了winsock2,沒太注意就寫下了下面的makefile:

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

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