當前位置:首頁 » 編程軟體 » 編譯工程發生錯誤

編譯工程發生錯誤

發布時間: 2022-12-21 11:26:12

編譯一個CPP文件時,出現這個錯誤怎麼辦

因為在工程編譯的時候各個.cpp文件依次單獨編譯,最後才連接到一起,當在編譯main.cpp文件時,看到main.cpp文件中有#include「2.cpp」文件時就把2.cpp中的內容和main.cpp一起編譯生成main.obj文件。別忘了2.cpp文件也是.cpp文件也要單獨編譯,編譯完2.cpp文件生成2.obj文件後。再將所有編譯後的.obj文件連接到一生成.exe文件。這時就會發現2.obj中的內容main.obj中也有(因為main.cpp中#include「2.cpp」)。所以會出現重復定義的錯誤。
這時你可能又會想到把2.cpp文件改名為2.h在main.cpp文件中#include「2.h」不就行了。因為.h文件不會單獨編譯。確實是這樣。將2.cpp改為2.h後不管工程目錄中有沒有添加2.h文件都可以。可是前面說了.h文件中最好只放聲明。(不失為一個解決問題的辦法)
extern可以置於變數或者函數前,以表示變數或者函數的定義在別的文件中,提示變壓器遇到此變數和函數時在其他模塊中尋找其定義。另外,extern也可用來進行鏈接指定。
關於extern更詳細的解釋請看網路
所以我們只需這樣:如果在1.cpp中要調用2.cpp中的函數,不要在1.cpp中#include「2.cpp」,只需在1.cpp中聲明一下要調用的函數,並且聲明前加關鍵字extern

㈡ IAR編譯錯誤,請高手給看看是怎麼回事

這是說明你的代碼量超出了你預設的rom大小,一般iar編譯程序後會根據一個
xxx.xcl文件把你的代碼和數據鏈接到指定地址,iar的文件夾裡面搜搜就能搜到,"-z(code)code=romstart-romend"是說你所有的代碼都放置在以romstart為起始地址,romend為終止地址的一段連續的空間內,romstart為0x4000016c,romend為40003fff,貌似是個有16k
flash的arm。上面報錯是因為你編譯出來的code
size
是0x58b4,已經超過了這個空間,你能做的就是看看能不能縮減代碼量。

㈢ iOS 編譯報錯怎麼辦

1.編譯iPad真機時,選擇了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.

若編譯出現如下錯誤:

Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

則修改 GCC4.2CodeGeneral區域中的ComplieForThumb為非選中.

已經有了開發者證書及私鑰後,可直接在越獄的手機上調試.

2. 編譯鏈接時, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某個類的文件.

或者:選擇項目名,在detail列表中的target列(顯示為一個又圓圈),把這個文件的復選選中,或者再次選中.以把它加入到這個target裡面來.

3.在sdk4.0及以上使用RegexKitLite報'captureCount' was not declared in this scope錯誤,是在非.m文件中使用了它的原因.

4.there is no sdk with the name or path.

從網上down的開源代碼,結果運行的時候常出現這樣的錯,並且在deployment中沒有iosdeploymenttarget選項.

嘗試 Project/Edit Active Target/ 及 Set Active SDK菜單項,來回切換一下Active Configuration。

5. EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION錯誤,意味著這個app有內存管理的問題,一般是因為訪問野指針對象造成的。

一個和內存相關的崩潰一般很難定位到源代碼,因為這個惡魔可能很早就在程序中做了壞事了。假如一段有問題的代碼混亂了內存結構,這樣產生的蝴蝶效應可能會在之後很久才表現出來,並且總在不同的地方。所以,若有指針類型出現了不可能的變化,很可能就是因為內存結構被野指針調用混亂了。

修復一些警告後,可能就能預防一些內存錯誤。警告在左邊靠近行號的黃色三角指出一個編譯警告,你點擊那個黃色的三角形,xcode可能會彈出一個「Fix-it」的建議。

EXC_BAD_ACCESS崩潰不像SIGABRT,將不會得到很明朗的錯誤消息。然而可以使用一個讓人看到曙光的調試工具:Zombies!死亡對象工具。打開這個項目的scheme editor,選擇Run 選項,然後選擇Diagnosics標簽。勾上Enable Zombie Objects選項。當這個zombie工具被啟用之後,即使這個對象被釋放了,這個對象的內存也不會被清理。所以,那塊內存將會被標記為「長生不死的」。假如你試著之後又去使用這塊內存,這個app能夠意識到你的錯誤操作,並且app將會拋出「messagesent to daellocated instance」錯誤並且終止運行。

在工程中加入NSZombieEnabled 環境變數,並設為啟用,則在 EXC_BAD_ACCESS 發生時,XCode 的 Console 會列印出問題描述中,設置方法:雙擊Executables 下的 可執行模組,在彈出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,並設定為 YES,點擊選中復選框啟用此變數。

可以再加入 MallocStackLogging 來啟用malloc記錄,以獲得更多的提示來幫助定位問題。

在gdb窗口輸入 (格式: shell malloc_history <id> <address>) shellmalloc_history1436 0x5f7fcf0, 也可以在終端中去運行 就要去掉以上的shell 指令 如 malloc_history <id> <address>

應該僅當需要調試內存時,才設置上述環境變數。

注意一點:不應該一直啟用zombie objects。因為這個工具將永遠不會釋放內存,只是簡單標記一下這個內存是不死的,你最終將會在某個時候耗盡所有的內存,因為所有分配過的內存都不會得到重用。因此應該在排查內存相關的錯誤的時候才開啟zombie objects,其他時候應該關閉它。

在xcode4中,To edit environment variables, go to Menu Proct / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.

6.運行一個IPhone程序時,彈出窗口說「程序運行失敗,預置描述文件已過期」 。 解決辦法是,在Xcode中, window-> Orgnazier -> 你的iphone ->刪除帶有紅*的該程序之前的Profile 。 然後從Xcode運行該程序.

7.真機編譯時報 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain

修改工程和Targets的get infouild 中的code signing identity為空

8.調試列印

CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}

If NSLog() is printing something out as an NSCFType, try CFShow().

9. 編譯時報 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version為gcc4.2

10.this class is not key value coding-compliant for the key viewController

可能在創建了一個基於view的工程,而後把生成的viewcontroller刪除了,但是在.xib中還有對它的引用,在IB中直接用delete鍵刪除掉它就行了。

11.這台電腦上已經存在一個名為「embedded.mobileprovision」的預置文件,您是否要替換么?

http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html

12.真機調試時報failed to upload *.app

http://hi..com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html

http://www.shouyanwang.org/thread-462-1-1.html

13.記的release時,先置delegate為nil。

一個節點不應該保留任何對不屬於它的節點的引用。

14.模擬器

將xcode升級到4.3.1以後發現,ipad的模擬器,沒有Home鍵了。Command+Shift+H就可以實現類似點擊Home鍵的效果了。

    ㈣ pod第三方庫後,引用問題,工程編譯報錯解決方法

    pod一個第三庫,或者自己製作的私有庫,發現import類後,編譯工程報錯了,類似錯誤如下:

    如何解決呢?

    在工程的 targets 中搜索

    other linker flags ,你會發現默認只有個-objc, 我們加上一個$(inherited)後,清理工程再次編譯你會發現編譯ok了!

    這個$(inherited)可用於將構建設置從項目級別繼承到目標級別。拿添加pod依賴遇到的問題來說就是,當前工程target級別沒有繼承項目級別的配置,所以獲取不到pod中第三方庫的頭文件路徑,以致於報錯!

    ㈤ 為什麼用cmd 編譯c工程,顯示錯誤fatal error c1083 找不到文件winsock2.h

    winsock2.h 應當在 。。。。\VC98\Include 文件夾(VC++ 6.0)。
    如果文件不存在,就有錯。
    如果 編譯器路徑沒有設好,也會 找不到文件。
    編譯器安裝時,應裝好了/設好了路徑。
    萬一 沒設好。你找一下 VCVARS32.BAT (文件夾\VC98\Bin 里 或別的地方 -- 與你的編譯器版本有關)。在 cmd 跑一下 VCVARS32.BAT 路徑 就 設好了。

    ㈥ VB 中找不到工程或庫(提示編譯錯誤)怎麼回事

    打開EXCEL VB 時彈出編譯錯誤的需要給EXCEL VB設定一個值,即可解決。

    具體步驟:

    1、首先我們打開一個工作樣表作為例子。

    ㈦ IAR工程編譯出現這樣的錯誤怎麼解決

    原因:安裝的時候沒有把注冊機的0x.....字串的小寫字母改為大寫字母。

    Warning[Pe001]: last line of file ends without a newline F:\emoTion\IAR\PK 升級\CC1110-8\main.c
    原因:在使用IAR時常常會彈出類似這樣一個警告,其實只要在最後一行多加一個回車就不會再有這個警告了.

    Error[e72]: Segment BANK_RELAYS must be defined in a segment definition option (-Z, -b or -P)
    原因:這是用730B編譯的錯誤,可能是由於相對於目標工程版本過高的,後改用720H,沒有發生錯誤。

    Error[Pe005]: could not open source file "stdio.h"
    原因:頭文件路徑不對造成,改正的方法是在設置選項卡的C/C++ Compiler -> Preprocessor選項里,將$TOOLKIT_DIR$\INC\CLIB\添到Incl? paths中。

    ㈧ qt編譯工程時出現QMAKESPEC錯誤

    Failure to read QMAKESPEC conf file /home/lida/qtsdk-2009.05/qt/mkspecs/linux-g++/qmake.conf.

    告訴你不能讀取到qmake.conf文件,這個文件是設置編譯器默認參數的,你先找找看有沒有這個文件。嚴重懷疑你沒有安裝qtsdk。
    qt sdk和 creater是單獨開的,尤其是在Linux下面。

    ㈨ VS2010新建工程編譯就出錯了

    提示說明在轉換到COFF文件因為錯誤失敗了(VS2010裝好了,一般是不會有[file invalid] 錯的)。
    而完成轉換工作的是cvtres.exe這個程序。出現上面錯誤的根本原因是系統中存在有多個版本的 cvtres.exe。
    系統目錄下版本: C:\Windows\Microsoft.NET\Framework\v4.0.30319\cvtres.exe
    VS目錄下版本: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\BIN\cvtres.exe
    如果是64位系統,那麼還有個在 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\cvtres.exe
    不過Framework 和Framework64下倆個版本是一致的,而且由於系統更新,一般比VS目錄下的版本新。
    到此解決方法也就明顯簡單了,只需要將舊版的重命名或者刪除,不過我一般習慣重命名,比如在後面加上 -old。

    ㈩ vc程序編譯出現錯誤

    第一個問題:這個類型轉換警告只會在重新編譯的時候出來,連著運行就不會再提示

    第二個問題:引起LNK2001的原因很多,你最好能把整個工程發上來,幫你看看。剛才找了一些講解這個的,也許對你有用。
    學習VC++時經常會遇到鏈接錯誤LNK2001,該錯誤非常討厭,因為對於
    編程者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連接錯誤時,
    編譯都已通過。產生連接錯誤的原因非常多,尤其LNK2001錯誤,常常使人不
    明其所以然。如果不深入地學習和理解VC++,要想改正連接錯誤LNK2001非
    常困難。
    初學者在學習VC++的過程中,遇到的LNK2001錯誤的錯誤消息主要為:
    unresolved external symbol 「symbol」(不確定的外部「符號」)。
    如果連接程序不能在所有的庫和目標文件內找到所引用的函數、變數或
    標簽,將產生此錯誤消息。一般來說,發生錯誤的原因有兩個:一是所引用
    的函數、變數不存在、拼寫不正確或者使用錯誤;其次可能使用了不同版本
    的連接庫。
    以下是可能產生LNK2001錯誤的原因:
    一.由於編碼錯誤導致的LNK2001。
    1.不相匹配的程序代碼或模塊定義(.DEF)文件能導致LNK2001。例如,
    如果在C++ 源文件內聲明了一變數「var1」,卻試圖在另一文件內以變數
    「VAR1」訪問該變數,將發生該錯誤。
    2.如果使用的內聯函數是在.CPP文件內定義的,而不是在頭文件內定
    義將導致LNK2001錯誤。
    3.調用函數時如果所用的參數類型同函數聲明時的類型不符將會產生
    LNK2001。
    4.試圖從基類的構造函數或析構函數中調用虛擬函數時將會導致LNK2001。
    5.要注意函數和變數的可公用性,只有全局變數、函數是可公用的。
    靜態函數和靜態變數具有相同的使用范圍限制。當試圖從文件外部訪問
    任何沒有在該文件內聲明的靜態變數時將導致編譯錯誤或LNK2001。
    函數內聲明的變數(局部變數) 只能在該函數的范圍內使用。
    C++ 的全局常量只有靜態連接性能。這不同於C,如果試圖在C++的
    多個文件內使用全局變數也會產生LNK2001錯誤。一種解決的方法是需要時在
    頭文件中加入該常量的初始化代碼,並在.CPP文件中包含該頭文件;另一種
    方法是使用時給該變數賦以常數。
    二.由於編譯和鏈接的設置而造成的LNK2001
    1.如果編譯時使用的是/NOD(/NODEFAULTLIB)選項,程序所需要的運行
    庫和MFC庫在連接時由編譯器寫入目標文件模塊, 但除非在文件中明確包含
    這些庫名,否則這些庫不會被鏈接進工程文件。在這種情況下使用/NOD將導
    致錯誤LNK2001。
    2.如果沒有為wWinMainCRTStartup設定程序入口,在使用Unicode和MFC
    時將得到「unresolved external on _WinMain@16」的LNK2001錯誤信息。
    3.使用/MD選項編譯時,既然所有的運行庫都被保留在動態鏈接庫之內,
    源文件中對「func」的引用,在目標文件里即對「__imp__func」 的引用。
    如果試圖使用靜態庫LIBC.LIB或LIBCMT.LIB進行連接,將在__imp__func上發
    生LNK2001;如果不使用/MD選項編譯,在使用MSVCxx.LIB連接時也會發生LNK2001。
    4.使用/ML選項編譯時,如用LIBCMT.LIB鏈接會在_errno上發生LNK2001。
    5.當編譯調試版的應用程序時,如果採用發行版模態庫進行連接也會產
    生LNK2001;同樣,使用調試版模態庫連接發行版應用程序時也會產生相同的
    問題。
    6.不同版本的庫和編譯器的混合使用也能產生問題,因為新版的庫里可
    能包含早先的版本沒有的符號和說明。
    7.在不同的模塊使用內聯和非內聯的編譯選項能夠導致LNK2001。如果
    創建C++庫時打開了函數內聯(/Ob1或/Ob2),但是在描述該函數的相應頭
    文件里卻關閉了函數內聯(沒有inline關鍵字),這時將得到該錯誤信息。
    為避免該問題的發生,應該在相應的頭文件中用inline關鍵字標志內聯函數。
    8.不正確的/SUBSYSTEM或/ENTRY設置也能導致LNK2001。
    其實,產生LNK2001的原因還有很多,以上的原因只是一部分而已,對初
    學者來說這些就夠理解一陣子了。但是,分析錯誤原因的目的是為了避免錯
    誤的發生。LNK2001錯誤雖然比較困難,但是只要注意到了上述問題,還是能
    夠避免和予以解決的。

    熱點內容
    艾派密碼是什麼 發布:2025-07-15 18:47:40 瀏覽:587
    密碼鎖如何在裡面開門 發布:2025-07-15 18:35:00 瀏覽:520
    額溫演算法 發布:2025-07-15 18:18:14 瀏覽:727
    ie客戶端事件腳本執行異常 發布:2025-07-15 18:10:13 瀏覽:24
    自製壓縮兔糧 發布:2025-07-15 18:09:25 瀏覽:11
    腳本病毒的危害 發布:2025-07-15 18:04:00 瀏覽:259
    簡單的解壓 發布:2025-07-15 17:42:25 瀏覽:148
    lol最強腳本 發布:2025-07-15 17:41:45 瀏覽:290
    安卓手機測量工具在哪裡 發布:2025-07-15 17:41:39 瀏覽:241
    易語言灰鴿子源碼 發布:2025-07-15 17:37:08 瀏覽:869