1. 程式人生 > >如何解決linux下編譯出現的multiple definition of錯誤

如何解決linux下編譯出現的multiple definition of錯誤

今天,在編譯quagga的過程中出現了multiple definition of的錯誤。該錯誤表示不同檔案對同一變數進行了重複定義。因此,可以從以下幾個方面來排查這個問題:

1. 是否定義了重複變數:

直觀來講,如果在已經引用的global.h中定義了變數v,那麼在本檔案之中,就不能再定義一個都是全域性的變數。模組編譯時雖然能夠通過,但在連結過程中就會發現有多個變數,因此報錯。解決辦法就是修改不必要的重名。

2.連結出錯:

就是在連結的時候才報錯。

這說明模組內的用法是正確的,但由於未能唯一標示同一變數,導致多次宣告。

解決方法(1):在global.h中宣告,其他所有引用的地方用extern來宣告,該變數引用自外部檔案;

解決方法(2):在global.h中將變數修改成static變數,那麼全域性就只會儲存一份。 

相關推薦

如何解決linux編譯出現multiple definition of錯誤

今天,在編譯quagga的過程中出現了multiple definition of的錯誤。該錯誤表示不同檔案對同一變數進行了重複定義。因此,可以從以下幾個方面來排查這個問題: 1. 是否定義了重複變數: 直觀來講,如果在已經引用的global.h中定義了變數v,那麼在本檔案

Android之jni編譯出現multiple definition of '×××××'

1、問題編譯ndk程式碼的時候提示multiple definition of '×××××'2、原因多個檔案包含同一個標頭檔案時,在Android.mk檔案裡面寫了2個檔案×××_src_files

檔案編譯出現multiple definition of `xxxxxx'的解決辦法

問題: 原來有單個檔案tcpclient.c,執行gcc -o tcpclient tcpclient.c可以順利完成編譯,並能與下載到目標板中的tcpserver成功通訊; 現在把tcpclient.c中的底層通訊部分抽取出來,單獨放到一個檔案中nettrans.c中,並

編譯時產生multiple definition of 錯誤解決方法

總結了解決multiple definition of的方法: 問題原因: (1)    當多個檔案包含同一個標頭檔案時,並且你的.H裡面沒有加上條件編譯 #ifndef TEST_H #define TEST_H #endif 就會獨立的解釋,然後生成每個檔案生成獨立的標

解決 linux編譯.sh檔案報錯 “[: XXXX: unexpected operator” 問題

原因:linux下能正常執行的指令碼,在ubuntu系統中都會編譯報錯,因為二者使用的直譯器不一同導致 Linux:.sh ubuntu:.dash 因為ubuntu預設的sh是連線到dash的,又因為dash跟bash的不相容所以出錯了.執行時可以把sh換成bash檔

解決 linux編譯make檔案報錯“/bin/bash^M: 壞的直譯器:沒有那個檔案或目錄” 問題

        PS背景:我在公司做sdk 的pc端開發,所以經常會在win下編譯通過之後跑到linux下再執行一次已確保能支援多平臺。        今兒在win下跑完一程式,然後放到linux下跑的時候,我用指令:sudo ./build.sh但是卻沒有任何反應。於是我換

解決C++編譯出現的重定義問題:multiple definition of ’XXX‘錯誤

1 //file_NO2:hello.cpp 2 #include<iostream> 3 #include"hello.h" 4 using namespace std;

C++ 解決 multiple definition of & previous definition here編譯錯誤

1、第一種可能是 一個函式多次重定義 應新增以下巨集定義 #ifndef TEST_H #define TEST_H #include //you code #endif 2、原始碼直接寫在標頭檔案.h裡沒有對應的.cpp檔案 需要每個函式前新增 inline

解決linux按退格鍵出現 ^? 的問題

容易 inux 所有 linux strong 打印 常用 tro code 處理辦法:使用stty命令修改。 stty命令語法 stty是linux下改變和打印終端設置的常用命令。 stty(選項)(參數) -a:以容易閱讀的方式打印當前的所有配置; -g:以stt

解決Linux網路程式設計(sendto send )出現 SIGPIPE 訊號導致程式異常終止的問題

引言 最近在Linux下網路程式設計時,出現SIGPIPE 訊號導致程式異常終止,本文記錄下解決的方法以及相應的知識。 SIGPIPE 訊號資料 什麼時候出現此訊號,APUE中有關此訊號的解釋如下: Linux man手冊有關此訊號的解釋: man 7 signal SI

Linux編譯PHP常見錯誤解決方法

locate freetype evel distrib 常見 expec fin install erro 1、configure: error: xml2-config not found. Please check your libxml2 installation.

linux編譯新核心,解決無法找到eth0裝置問題,安裝eth0網絡卡驅動

由於我的blktrace執行時出現問題,只能對裝置測試一次,第二次的時候就會報如下錯誤:no such file or directory google瞭解決方案,很多都說是核心版本的問題,簡單的方法解決不了啊,測試不能不做啊,所以今天只能果斷換核心版本了(不過我想說每編一次核心,都會遇到新的

LinuxTomcat出現 PermGen space的解決方法

java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "http-bio-8080-exec-5" java.lang.OutOfMemoryError: PermGen space &nb

解決 multiple definition of 問題

原因:多個檔案包含同一個標頭檔案且標頭檔案.h沒有加上條件編譯。因為每個.h標頭檔案被編譯生成獨立的標示符,編譯器連結時就出現了重複定義的錯誤。 Methon 1:為每個標頭檔案加上條件編譯,避免該檔案多次引用時被多次解釋。 #ifndef TEST_H #

wincap4.11在vc6編譯出現_W64錯誤解決方法】

別人問題以及解答: winpcap 4.1.1在vc6下編譯會出現以下錯誤,原因是vc6.0並不完美支援c++99標準,在64位cpu中編譯會有問題,將winpcap開發包換到4.0.1版本及以下錯誤消失 c:/wpdpack/include/pcap-stdinc.h(79) : error C2144

全域性變數 multiple definition of 問題解決方法

解決方法:1.給每一個頭檔案加上條件編譯:注:此方法不是解決上述問題的方法,只是解決multiple definition of的一個方法。 當多個檔案包含同一個標頭檔案時,而標頭檔案中沒有加上條件編譯,就會獨立的解釋,然後生成每個檔案生成獨立的標示符。在編譯器連線時

解決Linuxscp傳輸成功後出現掛起hang和檔案大小異常的問題

今天在安裝系統為CentOS 6.6的伺服器上使用SCP傳輸小檔案的時候,出現傳輸進度達到100%但是接收檔案一方檔案大小為0的情況,下圖為使用“scp -vvvv [file] [user]@[IP]:[directory]”打開了debug資訊下的傳輸過程:由上圖可知,接

multiple definition of 問題解決方法

問題描述:有一個opt_process.h檔案,兩個.cc檔案都引用了這個.h檔案,在.h檔案中聲明瞭一些全域性變數,報錯 /tmp/ccBCSKoH.o:(.bss+0x0): multiple definition of longopts' /tmp/c

window工具訪問linuxmysql出現 error no 2003 10061錯誤解決辦法

1、檢視:netstat -an|grep 3306 是空的,說明沒有在偵聽           解決辦法:修改/etc/my.cnf 將其中skip-networking註釋掉,然後執行netstat -an|grep 3306 就可以看到了 2、對於伺服器來說,

解決multiple definition of的方法

問題原因:     當多個檔案包含同一個標頭檔案時,並且你的.H裡面沒有加上條件編譯 #ifndef TEST_H #define TEST_H #endif 就會獨立的解釋,然後生成每個檔案生成獨立