c语言编程为什么会出现Undefined symbol 错误
那篇 c语言的案例编写悲剧了 的文章 有错误内容:
帮忙节说明一下:和改正方法
顺便说一下settextstyle函数控制的是那的颜色 展开
当出现没有定义的变量,或无法处理的符号时,就会出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表示存放图形驱动文件的路径。
2024-08-19 广告
1 C语言要求,所有变量必须先定义后使用。所以,一旦出现了没有定义的变量名,就会报这个错误。
这时需要根据出错的提示信息,包括所在行数,以及未找到的符号名,查找出错的是哪个变量。再根据上下文,确定如何修改。
a. 变量确实没有定义,这时需要补充变量的定义。
b.变量已经定义,但是后续打代码的时候写错了。这个是很常见的,需要注意C语言变量名是区分大小写的,即abc和ABC是两个不同的标识符。
c.变量作用域影响。C语言中,局部变量的作用域是从定义位置开始,到所在大括号结束的。所以如果变量的使用超出了变量的作用域,也会出现这种情况。
2 多余符号。
书写运算符时,如果符号打多了,或者打的不对,也可能出现这种情况。比如
a+b
打成了
a++b
这时也会出现类似的报错。
3 中文符号使用,或全角符号,英文字符,以及空格等的使用。
在C语言中,所有的变量及符号,均需要以半角英文形式。所以一旦在程序中使用了中文符号,或全角字符,均会出现该错误信息。
settextstyle 不是ANSI C 的标准函数。VC++ 不支持。TC 有此函数,在 graphics.h 里。
void far settextstyle(font,dir,charsize);
int font; // 字体
int dir; // 方向
int charsize; // 大小
不控制颜色
你要查你的编译器说明,了解 settextstyle函数控制什么颜色
因此,在使用变量之前必须定义它。