最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

文件編譯時出現(xiàn)multiple definition of 'xxxxxx'的具體解決方法

 更新時間:2013年07月25日 10:04:50   作者:  
以下是對文件編譯時出現(xiàn)multiple definition of 'xxxxxx'的解決方法進行了詳細的分析介紹,如也遇到此問題的朋友們可以過來參考下
問題:
原來有單個文件tcpclient.c,運行gcc -o tcpclient tcpclient.c可以順利完成編譯,并能與下載到目標板中的tcpserver成功通訊;
現(xiàn)在把tcpclient.c中的底層通訊部分抽取出來,單獨放到一個文件中nettrans.c中,并有netrans.h作為頭文件;
然后,使用命令
復制代碼 代碼如下:

gcc -o tcpclient nettrans.c tcpclient.c

編譯,也總能成功編譯。
但是,使用Makefile來編譯,總是出現(xiàn)如下multiple definition of類的錯誤:
復制代碼 代碼如下:

dingq@u1110-120628:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ make
gcc  nettrans.o tcpclient.o -o tcpclient
tcpclient.o: In function `nettrans':
/home/dingq/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket/nettrans.c:30: multiple definition of `nettrans'
nettrans.o:/home/dingq/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket/nettrans.c:30: first defined here
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [client] Error 1

Makefile的內容:
復制代碼 代碼如下:

CC = gcc
CROSS_COMPILE = arm-linux-
CROSS_CC = $(CROSS_COMPILE)gcc
CCFLAGS = -g3 -Wall -o0
LDFLAGS =
RM = -rm -rf
SRC_CLIENT = nettrans.c tcpclient.c
SRC_SERVER = tcpserver.c
OBJ_CLIENT = $(SRC_CLIENT:%.c=%.o)
OBJ_SERVER = $(SRC_SERVER:%.c=%.o)
.PHONY : all
all : client
$(OBJ_CLIENT) : $(SRC_CLIENT)
 $(CC) $(CCFLAGS) -c $< -o $@
$(OBJ_SERVER) : $(SRC_SERVER)
 $(CROSS_CC) $(CCFLAGS) -c $< -o $@
client : $(OBJ_CLIENT)
 $(CC) $(LDFLAGS) $(OBJ_CLIENT) -o tcpclient
server : $(OBJ_SERVER)
 $(CROSS_CC) $(LDFLAGS) $(OBJ_SERVER) -o tcpserver
.PHONY : clean
clean :
 $(RM) *.o tcpclient tcpserver

解決辦法:
1. 使用普通命令編譯可以成功,但是使用Makefile就不成功,說明問題出在Makefile上;
再仔細檢查Makefile具體的編譯執(zhí)行過程:
復制代碼 代碼如下:

dingq@u1110-120628:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ make clean;make
rm -rf *.o tcpclient tcpserver
gcc -g3 -Wall -o0 -c nettrans.c -o nettrans.o
gcc -g3 -Wall -o0 -c nettrans.c -o tcpclient.o
gcc  nettrans.o tcpclient.o -o tcpclient
tcpclient.o: In function `nettrans':
/home/dingq/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket/nettrans.c:30: multiple definition of `nettrans'
nettrans.o:/home/dingq/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket/nettrans.c:30: first defined here
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [client] Error 1

原來生成nettrans.o和tcpclient.o都使用了相同的源文件nettrans.c;
所以,是Makefile中
復制代碼 代碼如下:

$(OBJ_CLIENT) : $(SRC_CLIENT)
 $(CC) $(CCFLAGS) -c $< -o $@

這個地方出了問題,應該使用模式規(guī)則來進行目標文件和依賴文件的匹配;
更改Makefile如下:
復制代碼 代碼如下:

CC = gcc
CROSS_COMPILE = arm-linux-
CROSS_CC = $(CROSS_COMPILE)gcc
CCFLAGS = -g3 -Wall -o0
LDFLAGS =
RM = -rm -rf
SRC_CLIENT = nettrans.c tcpclient.c
SRC_SERVER = tcpserver.c
OBJ_CLIENT = $(SRC_CLIENT:%.c=%.o)
.PHONY : all
all : client
%.o : %.c
 $(CC) $(CCFLAGS) -c $< -o $@
client : $(OBJ_CLIENT)
 $(CC) $(LDFLAGS) $(OBJ_CLIENT) -o tcpclient
server : $(OBJ_SERVER)
 $(CROSS_CC) $(CCFLAGS) -c $(SRC_SERVER) -o $(OBJ_SERVER)
 $(CROSS_CC) $(LDFLAGS) $(OBJ_SERVER) -o tcpserver
.PHONY : clean
clean :
 $(RM) *.o tcpclient tcpserver

重新編譯,成功生成tcpclient。
問題解決。

相關文章

  • C語言簡明講解類型轉換的使用與作用

    C語言簡明講解類型轉換的使用與作用

    類型轉換(type?cast),是高級語言的一個基本語法。它被實現(xiàn)為一個特殊的運算符,以小括號內加上類型名來表示,接下來讓我們一起來詳細了解
    2022-04-04
  • C語言利用鏈表與文件實現(xiàn)登錄注冊功能

    C語言利用鏈表與文件實現(xiàn)登錄注冊功能

    這篇文章主要介紹了C語言利用鏈表與文件實現(xiàn)登錄注冊功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C語言進階輸入輸出重定向與fopen函數(shù)使用示例詳解

    C語言進階輸入輸出重定向與fopen函數(shù)使用示例詳解

    這篇文章主要為大家介紹了C語言進階輸入輸出重定向與fopen函數(shù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • C/C++時間庫chrono的使用總結

    C/C++時間庫chrono的使用總結

    std::chrono是C++標準庫中的一個組件,用于表示和處理時間,其功能就像是心理學中的感知系統(tǒng),它可以為我們捕捉、量化并操作抽象的時間概念,這就如同我們的大腦可以理解和感知周圍環(huán)境的時間流逝一樣,這種感知和理解能力是人類進行日?;顒铀匦璧?
    2023-12-12
  • C/C++中指針的深入理解

    C/C++中指針的深入理解

    指針在 C\C++ 語言中是很重要的內容,并且和指針有關的內容一向令初學者頭大,這篇文章主要給大家介紹了關于C/C++中指針的相關資料,需要的朋友可以參考下
    2021-07-07
  • QT中刪除信號于槽的連接的實現(xiàn)

    QT中刪除信號于槽的連接的實現(xiàn)

    本文主要介紹了QT中刪除信號于槽的連接的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • c語言判斷是否素數(shù)程序代碼

    c語言判斷是否素數(shù)程序代碼

    這篇文章主要介紹了c語言判斷是否素數(shù)的方法和問題,大家參考使用吧
    2013-11-11
  • 關于C++繼承你可能會忽視的點

    關于C++繼承你可能會忽視的點

    繼承是面向對象三大特性之一,有些類與類之間存在特殊的關系,下面這篇文章主要給大家介紹了關于C++繼承你可能會忽視的點,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • C語言實現(xiàn)學生學籍管理系統(tǒng)課程設計

    C語言實現(xiàn)學生學籍管理系統(tǒng)課程設計

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生學籍管理系統(tǒng)課程設計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • OpenCV圖像算法實現(xiàn)圖像切分圖像合并示例

    OpenCV圖像算法實現(xiàn)圖像切分圖像合并示例

    這篇文章主要為大家介紹了python圖像算法OpenCV實現(xiàn)圖像切分圖像合并操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06

最新評論

溆浦县| 杭锦后旗| 天镇县| 疏勒县| 敖汉旗| 锡林郭勒盟| 襄樊市| 广元市| 萍乡市| 利川市| 准格尔旗| 乌兰县| 武鸣县| 海宁市| 平凉市| 荣昌县| 新河县| 咸丰县| 那坡县| 巴林左旗| 微博| 张掖市| 七台河市| 永春县| 海兴县| 班玛县| 蓬溪县| 万载县| 栾川县| 清徐县| 民勤县| 芜湖市| 湘阴县| 阿勒泰市| 石屏县| 鄯善县| 云南省| 鸡西市| 平陆县| 长葛市| 襄汾县|