VC6.0链接LIB的问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 10:05:07
我用VC6.0建了一个基于多窗口的工程,在连接Jpeglib2.lib时出现了如下错误:
请高手给予指点:--------------------Configuration: ViewDib - Win32 Debug--------------------
Compiling...
Dib.cpp
dibapi.cpp
Generating Code...
Linking...
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl HighPassDIB(void *,int,int)" (?HighPassDIB@@YAHPAXHH@Z)
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl LowPassDIB(void *,int,int)" (?LowPassDIB@@YAHPAXHH@Z)
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl EdgeEnhanceDIB(void *,int,int)" (?EdgeEnhanceDIB@@YAHPAXHH@Z)
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl MedianFilterDIB(void *)" (?MedianFilterDIB@@YAHPAX@Z)
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl ErosionDIB(void *,int)" (?ErosionDIB@@YAHPAXH@Z)
Dib.obj : error LNK2001: unresolved external symbol "int __cdecl DilationDIB(void *,int)"

一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
函数内声明的变量(局部变量) 只能在该函数的范围内使用。
C++的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
二.由于编译和链接的设置而造成的LNK2001
1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001。
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。
4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_