在C编译环境下出现符号未定义的链接错误

作者&投稿:蒙舍 (若有异议请与网页底部的电邮联系)
c语言编译没有错误,连接有错误是怎么回事?程序本身没错~

1、链接错误也不一定是系统的问题,也有可能是程序的问题。如果编译有错的话是不会有链接的,链接要有obj目标文件,编译不通过就没有目标文件。
2、连接错误及原因:
编译器错误 C2001 错误消息
常数中有换行符
字符串常数不能继续到第二行,除非进行下列操作:
•用反斜杠结束第一行。
•用一个双引号结束第一行上的字符串,并在下一行用另一个双引号开始该字符串。

结束第一行是不够的。
编译器错误 C2002 错误消息
无效的宽字符常数
多字节字符常数是非法的。
通过检查下面的可能原因进行修复
1.宽字符常数包含的字节比需要的多。
2.未包括标准头文件 STDDEF.h。
3.宽字符不能与一般字符串连接。
4.宽字符常数之前必须是字符“L”:
编译器错误 C2003 错误消息
应输入“defined id”
标识符必须跟在预处理器关键字之后。
编译器错误 C2004 错误消息
应为“defined(id)”
标识符必须出现在预处理器关键字之后的括号中。
也可能由于为 Visual Studio .NET 2003 进行的编译器一致性工作生成此错误:在预处理器指

令中缺少括号。
如果预处理器指令缺少右括号,则编译器将生成一个错误。
编译器错误 C2005 错误消息
#line 应跟一个行号,却找到“token”
#line 指令后面必须跟行号。
编译器错误 C2006 错误消息
“directive”应输入文件名,却找到“token”
诸如 #include 或 #import 等指令需要文件名。若要解决该错误,请确保 token 是一个有效

文件名。并且将该文件名放在双引号或尖括号中。
编译器错误 C2007 错误消息
#define 语法
#define 后未出现标识符。若要解决该错误,请使用标识符。
编译器错误 C2008 错误消息
“character”: 宏定义中的意外
该字符紧跟在宏名之后。若要解决该错误,宏名之后必须有一个空格。
编译器错误 C2009 错误消息
宏形式“identifier”重复使用
宏定义的形参表多次使用该标识符。宏的参数列表中的标识符必须是唯一的。
编译器错误 C2010 错误消息
“character”: 宏形参表中的意外
该字符在宏定义的形参表中使用不正确。移除该字符以解决该错误。
编译器错误 C2011 错误消息
“identifier”:“type”类型重定义
该标识符已定义为 type 类型。如果多次将某个类型库导入同一个文件,也可能生成 C2011


编译器错误 C2012 错误消息
在“<”之后缺少名称
#include 指令缺少所需的文件名。
编译器错误 C2013 错误消息
缺少“>”
#include 指令缺少右尖括号。添加右尖括号以解决该错误。
编译器错误 C2014 错误消息
预处理器命令必须作为第一个非空白空间启动
预处理器指令的 # 符号必须是非空白行上的第一个字符。
编译器错误 C2015 错误消息
常数中的字符太多
一个字符常数包含的字符多于两个。标准字符常数只能包含一个字符,长字符常数只能包含两

个字符。
转义序列(如 )将被转换为单个字符。
当使用 Microsoft 扩展将字符常数转换为整数时,也可能发生 C2015。
编译器错误 C2017 错误消息
非法的转义序列
转义序列(如 )出现在字符或字符串常数之外。
当 stringize 运算符与包括转义序列的字符串一起使用时会发生 C2017。
编译器错误 C2018 错误消息
未知字符“hexnumber”
源文件包含一个意外的 ASCII 字符,该字符由其十六进制数标识。若要解决该错误,请移除

该字符。
编译器错误 C2019 错误消息
应找到预处理器指令,却找到“character”
该字符跟在 # 符号的后面,但它不是预处理器指令的第一个字母。
编译器错误 C2020 错误消息
“member”:“class”成员重定义
从基类或结构继承的成员被重定义。不能重定义继承成员,除非它在基类中被声明为 virtual


编译器错误 C2021 错误消息
应输入指数值,而非“character”
用作浮点常数的指数的字符是一个无效数字。确保使用的指数在范围之内。
编译器错误 C2022 错误消息
“number”: 对字符来说太大
字符或字符串常数中跟在反斜杠 (\) 后面的八进制数字太大,不能表示字符。
编译器错误 C2026 错误消息
字符串太大,已截断尾部字符
该字符串的长度超过了 16380 个单字节字符的**。
连接相邻字符串之前,字符串的长度不能超过 16380 个单字节字符。
大约为此长度的一半的 Unicode 字符串也会生成此错误。
编译器错误 C2027 错误消息
使用了未定义类型“type”
类型只有经过定义才能使用。若要解决该错误,请确保在引用类型前已对其进行了完全定义。
有可能声明一个指向已声明但未定义的类型的指针。但是 Visual C++ 不允许引用未定义的类

型。
编译器错误 C2028 错误消息
结构/联合成员必须在结构/联合中
结构或联合成员必须在结构或联合内部声明。
编译器错误 C2030 错误消息
“identifier”: 结构/联合成员重定义
结构或联合将同一标识符用于多个成员。
编译器错误 C2032 错误消息
“identifier”: 函数不能是结构/联合“structorunion”的成员
该结构或联合中的一个成员函数在 C++ 中允许使用而在 C 中却不允许。若要解决该错误,请

编译为 C++ 程序或移除该成员函数。
编译器错误 C2033 错误消息
“identifier”: 位域不能有间接寻址
该位域被声明为指针,这是不允许的。
编译器错误 C2034 错误消息
“identifier”: 位域类型对于位数太小
该位域声明中位的数目超过了基类型的大小。
编译器错误 C2036 错误消息
“identifier”: 未知的大小
对 identifier 的操作需要数据对象的大小,而该大小无法确定。
编译器错误 C2039 错误消息
“identifier1”: 不是“identifier2”的成员
该代码错误调用或引用了结构、类或联合的成员。
编译器错误 C2040 错误消息
“operator”:“identifier1”与“identifier2”的间接寻址级别不同
涉及该运算符的表达式具有不一致的间接寻址级别。
如果两个操作数都是算术的或都是非算术的(如数组或指针),则不用更改就可使用它们。如

果一个操作数是算术的,而另一个不是,则算术运算符将转换为非算术类型。
编译器错误 C2041 错误消息
非法的数字“character”(用于基“number”)
指定的字符不是基(如八进制或十六进制)的有效数字。
编译器错误 C2042 错误消息
signed/unsigned 关键字互相排斥
在单个声明中使用关键字 signed 和 unsigned。
编译器错误 C2043 错误消息
非法 break
break 仅在 do、for、while 或 switch 语句中合法。
编译器错误 C2044 错误消息
非法 continue
continue 仅在 do、for 或 while 语句中合法。
编译器错误 C2045 错误消息
“identifier”: 标签重定义
该标签出现在同一函数中的多条语句之前。
编译器错误 C2046 错误消息
非法的 case
关键字 case 只能出现在 switch 语句中。
编译器错误 C2047 错误消息
非法的 default
关键字 default 仅能出现在 switch 语句中。
编译器错误 C2048 错误消息
默认值多于一个
switch 语句包含多个 default 标签。删除其中一个 default 标签可解决该错误。
编译器错误 C2050 错误消息
switch 表达式不是整型
switch 表达式计算结果为一个非整数值。若要解决该错误,请在 switch 语句中只使用整数

值。
编译器错误 C2051 错误消息
case 表达式不是常数
Case 表达式必须是整数常数。
编译器错误 C2052 错误消息
“type”: 非法的 case 表达式类型
Case 表达式必须是整数常数。
编译器错误 C2053 错误消息
“identifier”: 宽字符串不匹配
宽字符串被分配给了一个不兼容的类型。
编译器错误 C2054 错误消息
在“identifier”之后应输入“(”
该函数标识符用在需要尾部括号的上下文中。
导致该错误的可能原因是省略了复杂初始化上的等号 (=)。
编译器错误 C2055 错误消息
应输入形参表,而不是类型表
函数定义包含参数类型列表而不包含形参表。ANSI C 需要命名的形参,除非它们是 void 或

是省略号 (...)。
编译器错误 C2056 错误消息
非法表达式
表达式因前一个错误而无效。
编译器错误 C2057 错误消息
应输入常数表达式
上下文要求常数表达式,即其值在编译时已知的表达式。
编译器错误 C2058 错误消息
常数表达式不是整型
该上下文需要整数常数表达式。
编译器错误 C2059 错误消息
语法错误 :“token”
该标记导致语法错误。
若要确定原因,则不仅要检查在错误信息中列出的行,还要检查该行上面的行。下面的示例对

声明 j 的行生成了错误信息,而该错误的真正源却出现在其上面的行中。
如果对行的检查没有获得有关可能出现的问题的任何线索,则尝试注释掉在错误信息中列出的

行以及可能出现在该行上面的若干行。
如果该错误信息在紧跟 typedef 变量的符号上出现,则检查该变量是否已在源代码中定义。
如果符号没有计算出任何结果(在使用 /Dsymbol= 编译时可能发生),可能会导致 C2059。
可能收到 C2059 的另一个特定原因是编译在函数的默认参数中指定了结构的应用程序。参数的

默认值必须是一个表达式。初始值设定项列表(如用于初始化结构的初始值设定项列表)不是表达式。其解决方法是定义一

个执行所需初始化的构造函数。
编译器错误 C2060 错误消息
语法错误 : 遇到文件结束
至少还需要一个标记。
编译器错误 C2061 错误消息
语法错误: 标识符“identifier”
编译器发现了不应在此出现的标识符。请确保在使用 identifier 之前对其进行声明。
初始值设定项可能括在了括号中。为避免该问题,请将声明符括在括号中或使其成为 typedef


在编译器将表达式作为类模板参数检测时也可能导致此错误;使用 typename 告诉编译器它是

一个类型。
编译器错误 C2062 错误消息
意外的类型“type”
编译器不需要类型名称。
编译器处理构造函数的参数列表中未定义类型的方式也可能导致 C2062。如果编译器遇到未定

义的(拼错了吗?)类型,则它假定构造函数是一个表达式,并发出 C2062。若要解决此错误,请只使用构造函数参数列表

中的定义类型。
编译器错误 C2063 错误消息
“identifier”: 不是函数
该标识符用作函数,但未声明为函数。
编译器错误 C2064 错误消息
项不会计算为接受“number”个参数的函数
通过表达式调用了函数。该表达式未计算为函数指针。
编译器错误 C2065 错误消息
“identifier”: 未声明的标识符
在可使用变量的类型前必须在声明中指定它。在可以使用函数前必须在声明或原型中指定该函

数使用的参数。
可能的原因:
1.您正在用 C 运行库的调试版本进行编译,在 for 循环中声明标准 C++ 库迭代器变量,然后

尝试在 for 循环范围外使用该迭代器变量。 用 C 运行库的调试版本编译标准 C++ 库代码暗指使用 /Zc:forScope。有关更

多信息,请参见调试迭代器支持。
2.可能正在调用当前不受生成环境支持的 SDK 头文件中的函数。
3.省略必要的包含文件,尤其是在定义 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或

WIN32_EXTRA_LEAN 时。这些符号从 windows.h 和 afxv_w32.h 中排除了一些头文件以加快编译。(在 windows.h 和

afxv_w32.h 中查找排除的头文件的最新说明。)
4.标识符名拼写错误。
5.标识符使用了错误的大小写字母。
6.字符串常数的后面缺少右引号。
7.命名空间范围不正确。例如,若要解析 ANSI C++ 标准库函数和运算符,则必须用 using 指

令指定 std 命名空间。下面的示例未能编译,因为 using 指令被注释掉,并且在 std 命名空间中定义了 cout:

估计是重定义一类的问题吧。。。当然也有可能编译器与系统不兼容。
具体的话得看程序头表符号重定位这些东西是不是出了问题。。
最直接的方法是阅读代码。。看代码是不是哪里出了问题,比如重定义,比如多个强符号。。
这里只有猜。。需要源代码。。以及说明用来编译链接工具。

看看是什么符号未定义,可能引用的外部变量或者函数没有定义,这个可能是有.c源文件没有编译进来造成的


c语言的标识符的作用是什么?
标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。例如,正确的标识符:abc,a1,prog_to。不能把C语言关键字作为用户标识符,例如if ,for, while等.标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89...

C语言中,用户定义的标识符,怎样才算合法?
C语言中,用户定义的标识符,合法条件:第一:组成标识符的字符必须是英文字母、数字、下划线,不可以是其他字符。第二:标识符必须以以字母或下划线开头(大写小写字母都可以)。第三:标识符区分大小写。第四:标识符不能使用关键字。

C语言编译过程详解
C语言的编译链接过程是要把我们编写的一个C程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,...

C语言编译、连接的各种错误
编译器错误 C2004 错误消息 应为“defined(id)” 标识符必须出现在预处理器关键字之后的括号中。 也可能由于为 Visual Studio .NET 2003 进行的编译器一致性工作生成此错误:在预处理器指令中缺少括号。 如果预处理器指令缺少右括号,则编译器将生成一个错误。编译器错误 C2005 错误消息 #line 应跟一个行号,却...

在c语言环境下在源代码中添加一个"}"就会出现多出错误?
{}都是成对出现的,多加或少加都会出错。也可以把}作为注释,这样编译器就会忽略这个}

linux用gcc编译c程序出现无效字符
语法错误 错误1 错误代码 printf("sum is:",sum);\/\/sum为int类型1 gcc错误提示:first.c: In function ‘main’:first.c:12:9: warning: too many arguments for format [-Wformat-extra-args]printf(“the value of sum:”,sum);错误原因分析:少了%d 正确代码如下:printf("sum is:%d",...

C程序运行出现错误,怎么解决?
当C程序运行出现错误时,可以通过以下步骤来解决问题:查看错误提示:首先,查看程序运行时的错误提示信息。编译器或运行时环境通常会提供相关的错误信息,例如错误的行号、错误类型等。仔细阅读错误信息,可以帮助您定位问题所在。检查代码逻辑:检查程序的代码逻辑,寻找可能的错误。注意检查语法错误、逻辑错误...

为什么c语言程序在运行时出现错误?
出现这个报错的原因是:代码输入过程中出现全角输入,将代码中括号、分号等用半角字符替换即可。根据题目给出的提示,请检查一下第51行代码,将51行代码中出现的全角符号替换成半角字符,或者输了重新输入就行。

在linux环境下对c语言程序编译连接后执行该程序为什么在命令行中加...
也包括执行程序的命令),系统先到这些路径中去查询,如果其中包含了该语句就执行了,最后都没有查到才执行当前目录中的程序,用.\/强制执行当前目录下的程序就是避免这个意外(环境变量指定路径中与当前目录中要执行的程序同名),省得执行了一个程序还搞不清执行的是否当前目录中要执行的那个了。

纯C语言求改正,由于受编译环境限制,不能用c++的引用“&”符号_百度知 ...
\/\/这里有例子~~你自己看看吧~~#define OK 1typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;\/\/\/here#include <stdlib.h>#include <stdio.h>int CreateListR_Link(LinkList *L,int elem[],int n);int LengthList_Link(LinkList *L);int CreateListR_Link(Link...

肇庆市18730231622: C语言程序编译成功了,为什么连接还出错 -
包骨秋梨: 1 编译阶段,执行的是对单个文件的转换,从源代码转换成二进制文件. 2 链接阶段,将每个源文件转成的二进制文件,及相关的系统库文件共同打包生成可执行文件. 3 从定义上可以看出,链接阶段,出现错误有两种可能: 1) 函数中引用了不存在的函数. 2) 编译环境有问题,导致ld出错.

肇庆市18730231622: 我在编程时进行编译的时候显示未定义标示符是怎么回事? -
包骨秋梨: 出现这种情况说明你的语言或某个单词写错了.

肇庆市18730231622: c语言程序执行出现错误''未定义的符号'main'在模块 :cos''是怎么回事 -
包骨秋梨: 不是“执行”时出现错误,而是在链接的时候吧?没有写main函数,或者链接的时候没有指定main函数所在obj文件名

肇庆市18730231622: c编译提示未定义的标示符? -
包骨秋梨: move(one,chree)哈哈.这句当然是错了啦.是three而不是chree啊.单词错误.

肇庆市18730231622: vs2008下用C写了一个程序,在编译连接的时候为什么提示未定义入口点? -
包骨秋梨: 你有没有建立工程啊,在VC++ 2008中,要运行后缀为cpp的文件,必须在工程下! 文件->新建->项目->(项目类型)Win32->(Visual Studio已安装的模版)Win32控制台应用程序->(输入项目名称后)->下一步->(附加选项)空项目->完成 在左边的窗口里面,右键->添加->新建项,就可以看到可以见了C++文件了.输入完名称,就可以进行输入了,把上面的代码输进去,Ctrl + F5,就可以运行了! 如果直接按F5的话,如果程序没有错误,就会跳出,你会看不到结果,通常在测试自己的代码有没有错误时采用.

肇庆市18730231622: 编程时出现未定义的符号应该怎么修改 -
包骨秋梨: 如果出现没有定义的字符,那就去定义他啊.比如,你的程序中有这么一句话: myData=128; 这个时候编译器提示myData变量没有定义,那就应该在使用这个变量之前定义他: unsigned char myData; myData=128; 当然,你要定义成什么类型,也要根据你要用myData这个变量来干什么定.

肇庆市18730231622: c++编译的时候无错误,连接执行的时候有错误是什么情况 -
包骨秋梨: 链接是错误的原因很多,我遇到的一般都是提示有未解决的外部符号什么什么的.你看看你的程序,是不是声明了某个函数,但是在后面却没有这个函数的定义,或者声明了使用外部变量但是在源文件中却没有找到变量的定义..如果没有解决的话,清把代码贴出来吧.

肇庆市18730231622: Linux下编写c语言头文件,编译时出现“函数未定义” -
包骨秋梨: 出现该错误的原因为编译时只变编译了源文件的一部分,故在链接时无法从编译好的目标代码中找到print函数,所以出错.根据你的源文件结构,个人推荐先单独编译源文件为多个object文件,再统一链接.方法如下 gcc -c main.c # -c参数的作用是让gcc只编译,不链接 gcc -c test.c gcc -o main main.o test.o # 将编译好的目标代码链接当然,以上是在gcc为编译器的前提下执行,如使用clang等其他编译器,方法类似(clang的调用方法与gcc高度兼容)

肇庆市18730231622: 为什么在c中加了#include<stdio.h>会出现未定义的符号 -
包骨秋梨: #include "stdio.h" main() { int a[]={0,1,2,3,4}; int i; int *p; p=a; for(i=0;i printf("%d ",*(P++)); }

肇庆市18730231622: 在C语言中运行程序时最常出现的有那些错误? -
包骨秋梨: 一、基础知识和数据类型、表达式 1、{},[],(),'',“”不配对.解决这个问题最好的方法就是每当写这些符号的时候就先写成一对,然后再在中间加内容. 2、忘记在语句的末尾加分号,或在预处理命令后多加分号.记住:每一个语句的后边都...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网