GCC依賴庫順序問題
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
今天在把linux下做的ipmsg移植到windows過程中,因為包含了一個開源庫SimpleSocket,而這個庫又引用了winsock2,沒太注意就寫下了下面的makefile:
g++ -o tt tt.o -lws2_32 -lclsocketd
結果報出了N多丑陋的undefined reference..之后嘗試將-lws2_32和-lclsocketd交換位置后,編譯通過。
上網查了下,發現gcc編譯時依賴庫的順序是很重要的。比如說,liba.a依賴于libb.a,則必須寫成-la -lb,似乎感覺這種順序很奇怪。另外參考網上http://www.cppblog.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 -Xlinker "-)"
這樣在括號中的庫的依賴關系就不需要你操心啦,雖然會延長鏈接時間。不過本人在實際使用過程中,g++認不出"-)",不加也可以鏈接成功。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成

結果報出了N多丑陋的undefined reference..之后嘗試將-lws2_32和-lclsocketd交換位置后,編譯通過。
上網查了下,發現gcc編譯時依賴庫的順序是很重要的。比如說,liba.a依賴于libb.a,則必須寫成-la -lb,似乎感覺這種順序很奇怪。另外參考網上http://www.cppblog.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 -Xlinker "-)"
這樣在括號中的庫的依賴關系就不需要你操心啦,雖然會延長鏈接時間。不過本人在實際使用過程中,g++認不出"-)",不加也可以鏈接成功。
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成