c语言编程为什么会出现Undefined symbol 错误 C语言程序出现Undefined symbol_closeg...

作者&投稿:任司 (若有异议请与网页底部的电邮联系)

当出现没有定义的变量,或无法处理的符号时,就会出Undefined symbol 错误,意思是没有定义的符号。

出现undefined symbol错误意味着程序的符号表中找不到这几个符号,我们可以通过 ldd -r ./app 命令看当前可执行程序app的动态库链接是否有问题。 

libz.so.1 => /usr/lib64/libz.so.1 (0x00002b1ecf5f3000)。

这种情况意味着能找到该动态库 libz.so.1 => not found 。

这种就是找不到动态库,出现第二种现象你需要看一下自己的makefile或者动态库配置文件,动态库名字和路劲是否有问题。

扩资资料

<graphics.h>是TC里面的图形库,如果要用的话应该用TC来编译,VC++有他自己的另外图形库。Tc中用initgraph()函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。

initgraph()和closegraph()都是图形函数,使用图形函数必须包括头文件"graphics.h"。

void far i nitgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);

graphdriver是指向图形驱动序号变量的指针,

graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针,

pathtodriver表示存放图形驱动文件的路径。



当出现没有定义的变量,或无法处理的符号时,就会出Undefined symbol 错误,意思是没有定义的符号。

1 C语言要求,所有变量必须先定义后使用。所以,一旦出现了没有定义的变量名,就会报这个错误。
这时需要根据出错的提示信息,包括所在行数,以及未找到的符号名,查找出错的是哪个变量。再根据上下文,确定如何修改。
a. 变量确实没有定义,这时需要补充变量的定义。
b.变量已经定义,但是后续打代码的时候写错了。这个是很常见的,需要注意C语言变量名是区分大小写的,即abc和ABC是两个不同的标识符。
c.变量作用域影响。C语言中,局部变量的作用域是从定义位置开始,到所在大括号结束的。所以如果变量的使用超出了变量的作用域,也会出现这种情况。

2 多余符号。
书写运算符时,如果符号打多了,或者打的不对,也可能出现这种情况。比如
a+b
打成了
a++b
这时也会出现类似的报错。

3 中文符号使用,或全角符号,英文字符,以及空格等的使用。
在C语言中,所有的变量及符号,均需要以半角英文形式。所以一旦在程序中使用了中文符号,或全角字符,均会出现该错误信息。

变量,函数未声明就使用,或漏写了头文件,就会出现Undefined symbol。

settextstyle 不是ANSI C 的标准函数。VC++ 不支持。TC 有此函数,在 graphics.h 里。

void far settextstyle(font,dir,charsize);
int font; // 字体
int dir; // 方向
int charsize; // 大小
不控制颜色

你要查你的编译器说明,了解 settextstyle函数控制什么颜色

Undefined symbol 就是说你的程序里出现了这样的变量:未定义而使用。
因此,在使用变量之前必须定义它。

为什么用ADS1.2编译汇编和C语言混合编程时,编译通不过啊,显示:Error:L6218E:Undefined symbol main (~

ADS1.2中一般用Main()主函数,你的错误是没有定义的main()函数。。。

是TC里面的图形库,如果要用的话应该用TC来编译,VC++有他自己的另外图形库!
Tc中用initgraph()函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。

initgraph()和closegraph()都是图形函数,使用图形函数必须包括头文件"graphics.h"。

void far i nitgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);

graphdriver是指向图形驱动序号变量的指针,
graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针,
pathtodriver表示存放图形驱动文件的路径。
图形驱动序号不同,图形驱动文件也不同。序号为VGA图形驱动对应"egavga.bgi"这个图形驱动文件。
"egavga.bgi"一般在 Tc目录下

例如:
-------
#include

int Drive,Mode=DETECT;
initgraph(&Drive,&Mode,""); //图形显示器、显示模式、路径自动检测

运行时需要在当前目录下存在 EGAVGA.BGI文件
在TC\BGI目录底下

-------
如果编译后的.exe文件在另外一个目录(如编译后的.exe文件在D:\MyTc 目录下,而编译器的程序和.BGI文件在C:\Turboc\bin 目录下,则需要填上BGI文件的路径
例如:
initgraph(&Drive,&Mode,"C:\\Turboc\\bgi");

希望对你有帮助。

“undef”作为“undefined”的缩写,它在英语中的使用广泛吗?
答:在编程语言中,"undef"常常用于表示一个变量或函数没有被明确赋值,例如:"As we shall not deal with algorithmic problems, we leave the term 'efficient' undefined(undef')." 这里的"undefined"意味着没有明确的效率标准。同样,"The money was lent for an undefined(undef) period of time"则...

c语言编程中出现的纠错英文语句是啥意思?
答:分析与处理:本错误通常是由于出现两个连续的操作符,括号不匹配或缺少括号、前一语句漏掉了分号引起的。 Extra parameter in call (调用时出现多余参数) 分析与处理:本错误是由于调用函数时,其实际参数个数多于函数定义中的参数个数所致。 Extra parameter in call to xxxxxx(调用xxxxxxxx函数时出现了多余参数) File...

C++预处理常用的C++预处理
答:在C++编程中,预处理指令是编译器在正式编译之前处理的一部分,它们提供了一种机制来控制编译行为和增强代码的可读性。以下是C++中一些常用的预处理指令及其功能:include: 用于在程序中包含头文件,如``引入标准输入输出流,或`"myheader.h"`引入自定义头文件。注意,头文件搜索顺序有所不同,`>`用于...

c++编程问题
答:这应该是为检测内存泄露而用到的。ifdef _DEBUG //如果定义了_DEBUG,即处于debug模式下 define new DEBUG_NEW //就用DEBUG_NEW替代所有的new。这里的DEBUG_NEW估计是重写后的new,每次使用它申请内存空间,它都会记录下来。当软件运行结束,它自动检查是不是所有申请的空间都已被释放,以此来检...

编程c语言总是有一个错误
答:执行 cl.exe 时出错这种错误一般是由于环境变量设置出错导致的,参见网上的各种教程 http://blog.csdn.net/hongloumengyan/article/details/6112272 实在不会就重装一遍,安装在默认路径里一般就不会有这个问题了

在C++中#define的作用是什么?
答:在C或C++语言中,“宏”分为有参数和无参数两种。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。宏定义的作用范围...

C中预定义标识符define include undef ifdef ifndef endif line 的用法...
答:一个大的程序可以分为多个模块,由多个程序员分别编程。 有些公用的符号常量或宏定义等可单独组成一个文件, 在其它文件的开头用包含命令包含该文件即可使用。这样,可避免在每个文件开头都去书写那些公用量, 从而节省时间,并减少出错。对文件包含命令还要说明以下几点:1. 包含命令中的文件名可以用双引号括起来,也可以...

C语言编程时 都有什么样的错误提示
答:Bad undef directive syntax 编译预处理undef有语法错误 Call of non-function 调用未定义的函数 Call to function with no prototype 调用函数时没有函数的说明 Cannot modify a const object 不允许修改常量对象 Case outside of switch Case 出现在 switch 之外 Case statement missing 漏掉了 Case ...

def是什么意思
答:def是Python语言的关键词之一,用于定义函数,函数是Python编程中最重要的概念之一,可以理解为一块完整而且可重复使用的代码。函数或称为子程序,是一段代码块,它可以在程序的任何地方被调用,在调用函数时你可以向它传递参数,函数可以返回值或不返回值。使用函数可以帮助开发人员更好地组织代码,让程序...

typedef struct {...}*Pstr; 这个指针是什么意思?
答:因为如此原因,在许多C语言编程规范中提到使用#define定义时,如果定义中包含表达式,必须使用括号,则上述定义应该如下定义才对:#define f(x) (x*x) 当然,如果你使用typedef就没有这样的问题。 4. typedef & #define的另一例 下面的代码中编译器会报一个错误,你知道是哪个语句错了吗?typedef char * pStr;char ...