当前位置:首页 » 编程软件 » 编译工程发生错误

编译工程发生错误

发布时间: 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 12:40:07 浏览:864
    安卓手机语音操作在哪里开启 发布:2025-07-15 12:18:49 浏览:283
    安卓导航仪上网卡插哪里 发布:2025-07-15 12:01:58 浏览:453
    把文件编译成数据 发布:2025-07-15 11:53:16 浏览:542
    mt4如何修改密码 发布:2025-07-15 11:53:16 浏览:215
    2021思域新款买哪个配置 发布:2025-07-15 11:33:24 浏览:772
    路由搭建http服务器 发布:2025-07-15 11:26:45 浏览:724
    消遣解压 发布:2025-07-15 11:26:43 浏览:393
    ICL编译 发布:2025-07-15 11:26:32 浏览:665
    快看吧交易密码多少 发布:2025-07-15 11:26:26 浏览:483