1. Linux下编写c语言头文件,编译时出现“函数未定义”
出现该错误的原因为编译时只变编译了源文件的一部分,故在链接时无法从编译好的目标代码中找到print函数,所以出错。
根据你的源文件结构,个人推荐先单独编译源文件为多个object文件,再统一链接。
方法如下
gcc-cmain.c#-c参数的作用是让gcc只编译,不链接
gcc-ctest.c
gcc-omainmain.otest.o#将编译好的目标代码链接
当然,以上是在gcc为编译器的前提下执行,如使用clang等其他编译器,方法类似(clang的调用方法与gcc高度兼容)
2. main()函数未定义是怎么回事
这类错误是编译器找不到指定的符号定义。它是在连接的时候出现的,有两种可能:
1、你写的这个函数只有省名,没有定义。
2、这个函数是动态连接库导出的函数,而你没有连接它的lib库文件可以用“#pragma comment(lib, "那个库.lib")”编译命令或设置VC的lib文件路径。
仔细查看代码是构建了main函数的,但是如下代码:(红框位置)
(2)函数未定义但是能编译运行扩展阅读:
C++函数分类:(main()函数是可执行程序的入口函数)
一、从用户使用的角度看,函数有两种:
1、标准函数,即库函数。这是由系统提供的。
2、用户自定义的函数。可以解决用户的专门需要。
二、从函数的形式看,函数分两类:
1、无参函数。printstar和print_message就是无参函数。在调用无参函数时,主调函数并不将数据传送给被调用函数,一般用来执行指定的一组操作。
2、有参函数。在调用函数时,在主调函数和被调用函数之间有数据传递。也就是说,主调函数可以将数据传递给被调用函数使用,被调用函数中的数据也可以带回来供主调函数使用。