一个古怪的编译错误,请大家指点(LNK2001)

时间:2022-02-24 19:19:02
小弟写了一个c程序,主函数在test.c里面,代码如下:
Test.c:
#include "stdio.h"
#include "dct.h"
main()
{
     int16_t p[4][4] = {......}
     dct(p);
     printf(.....);
}
dct.h文件如下:
void dct(int16_t d[4][4]);
dct.c文件如下:
#include "dct.h"
void dct(int16_t d[4][4]);
{
    ....;
}

15 个解决方案

#1


看起来应该是没有编译你的*.c文件
你编译的时候要编译所有的文件的

#2


我是编译所有文件的,但是这个问题怎么解决呢

#3


贴上来你的错误和你的出错代码,

#4


error LNK2001:unresolved external symbol _WinMain@16

#5


终于贴出来了,你用的是什么编译器?你要编译的是windows程序

所以你需要用比较特殊的参数,如果在vc下面,在建立工程的时候不要建立控制台工程,
建立 win32 application 就好了。

#6


fatal error LNK1120:1 unresolved eexternals

#7


void dct(int16_t d[4][4]);  // 这个怎么多了个分号,ha
{
    ....;
}

#8


我建的是 Empty Win32 Application

#9


这个是打字的时候出错了,我觉得不应该是语法错误,是编译上的错误

#10


以下是可能产生LNK2001错误的原因:

  一.由于编码错误导致的LNK2001

  1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。

  2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。

  3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。

  4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。

  5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。

  函数内声明的变量(局部变量) 只能在该函数的范围内使用

#11


#include "stdio.h"
#include "dct.h"
main()
{
     int16_t p[4][4] = {......}
     dct(p);
     printf(.....);
}
w32 application应该使用 WinMain作主函数的-_-
控制台程序才应该用 main作主函数-_-

#12


但是我还是不知道怎么解决,被困了一天了

#13


问题解决了,谢谢!!!怎么给分?

#14


帖子上面有一个管理的选项

#15


搞定了,谢谢

#1


看起来应该是没有编译你的*.c文件
你编译的时候要编译所有的文件的

#2


我是编译所有文件的,但是这个问题怎么解决呢

#3


贴上来你的错误和你的出错代码,

#4


error LNK2001:unresolved external symbol _WinMain@16

#5


终于贴出来了,你用的是什么编译器?你要编译的是windows程序

所以你需要用比较特殊的参数,如果在vc下面,在建立工程的时候不要建立控制台工程,
建立 win32 application 就好了。

#6


fatal error LNK1120:1 unresolved eexternals

#7


void dct(int16_t d[4][4]);  // 这个怎么多了个分号,ha
{
    ....;
}

#8


我建的是 Empty Win32 Application

#9


这个是打字的时候出错了,我觉得不应该是语法错误,是编译上的错误

#10


以下是可能产生LNK2001错误的原因:

  一.由于编码错误导致的LNK2001

  1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。

  2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。

  3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。

  4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。

  5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。

  函数内声明的变量(局部变量) 只能在该函数的范围内使用

#11


#include "stdio.h"
#include "dct.h"
main()
{
     int16_t p[4][4] = {......}
     dct(p);
     printf(.....);
}
w32 application应该使用 WinMain作主函数的-_-
控制台程序才应该用 main作主函数-_-

#12


但是我还是不知道怎么解决,被困了一天了

#13


问题解决了,谢谢!!!怎么给分?

#14


帖子上面有一个管理的选项

#15


搞定了,谢谢