今天写个程序使用到了LIBTIFF库,在编译时出现如下错误:
testlibtiff.obj : error LNK2001: unresolved external symbol _TIFFClose@4
testlibtiff.obj : error LNK2001: unresolved external symbol _TIFFWriteEncodedStrip@16
testlibtiff.obj : error LNK2001: unresolved external symbol [email protected] 已经加入到工程里了,奇怪的是 TIFFSetField 方法可以找到.请高手指点.
testlibtiff.obj : error LNK2001: unresolved external symbol _TIFFClose@4
testlibtiff.obj : error LNK2001: unresolved external symbol _TIFFWriteEncodedStrip@16
testlibtiff.obj : error LNK2001: unresolved external symbol [email protected] 已经加入到工程里了,奇怪的是 TIFFSetField 方法可以找到.请高手指点.
解决方案 »
- 继承cwnd的combobox类加载系统的滚动条行不?
- CString
- VC小问题。。。急
- 如何动态生成菜单项,并添加菜单项的响应函数?
- 谁有《Windows网络与通信程序设计》光盘啊!!
- 请问怎样给TreeView控件中的结点重命名?
- 做了一个局域网多用户聊天和文件传送程序,功能还可以,但有点BUG,调试版正常,但发行版有问题.请大家看看.
- MFC debug中exe直接打开对话框 不能正常传输数据到SQL 但是调试生成的对话框却可以
- 怎样实现在win98下按alt+del+ctrl看不到本程序的运行
- VC++ 在XP下用VC6.0编的程序 exe 文件在XP上运行正常,但是在WIN10、WIN7上就出现错误:File:timecore.cpp Line:34
- 请问月薪7K以上的兄弟们,个人所得税的税率是多少?
- 视图区域
extern TIFF* TIFFOpen(const char*, const char*);
extern void TIFFClose(TIFF*);
extern tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);TIFFOpen 实现在tif_open.c,TIFFClose实现在tif_close.c,TIFFWriteEncodedStrip实现在tif_write.c Libtiff.lib 是通过上面几个源程序和头问加编译而成的.如果说是头文件里面的问题,那问题在那里?
extern TIFF* TIFFOpen(const char*, const char*);
extern void TIFFClose(TIFF*);
extern tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);去掉extern试试
extern "c" void TIFFClose(TIFF*);
extern "c" tsize_t TIFFWriteEncodedStrip(TIFF*, tstrip_t, tdata_t, tsize_t);
你的 方法不行.to oyljerry(【勇敢的心】
那几个函数都实现了,在编译LIBTIFF.LIB时没有错误出现.
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {
#endif
extern const char* TIFFGetVersion(void);extern const TIFFCodec* TIFFFindCODEC(uint16);
extern TIFFCodec* TIFFRegisterCODEC(uint16, const char*, TIFFInitMethod);
extern void TIFFUnRegisterCODEC(TIFFCodec*);
extern int TIFFIsCODECConfigured(uint16);
extern TIFFCodec* TIFFGetConfiguredCODECs();extern void TIFFCleanup(TIFF*);
extern void TIFFClose(TIFF*);
extern int TIFFFlush(TIFF*);
extern int TIFFFlushData(TIFF*);
extern int TIFFGetField(TIFF*, ttag_t, ...);
extern int TIFFVGetField(TIFF*, ttag_t, va_list);
extern int TIFFGetFieldDefaulted(TIFF*, ttag_t, ...);
extern int TIFFVGetFieldDefaulted(TIFF*, ttag_t, va_list);
extern int TIFFReadDirectory(TIFF*);
extern tsize_t TIFFScanlineSize(TIFF*);
extern tsize_t TIFFRasterScanlineSize(TIFF*);
extern tsize_t TIFFStripSize(TIFF*);
extern tsize_t TIFFRawStripSize(TIFF*, tstrip_t);
extern tsize_t TIFFVStripSize(TIFF*, uint32);
extern tsize_t TIFFTileRowSize(TIFF*);
extern tsize_t TIFFTileSize(TIFF*);
extern tsize_t TIFFVTileSize(TIFF*, uint32);
extern uint32 TIFFDefaultStripSize(TIFF*, uint32);
extern void TIFFDefaultTileSize(TIFF*, uint32*, uint32*);
extern int TIFFFileno(TIFF*);
extern int TIFFSetFileno(TIFF*, int);
extern thandle_t TIFFClientdata(TIFF*);
extern thandle_t TIFFSetClientdata(TIFF*, thandle_t);
extern int TIFFGetMode(TIFF*);
extern int TIFFSetMode(TIFF*, int);
extern int TIFFIsTiled(TIFF*);
extern int TIFFIsByteSwapped(TIFF*);
extern int TIFFIsUpSampled(TIFF*);
extern int TIFFIsMSB2LSB(TIFF*);
extern int TIFFIsBigEndian(TIFF*);
extern TIFFReadWriteProc TIFFGetReadProc(TIFF*);
extern TIFFReadWriteProc TIFFGetWriteProc(TIFF*);
extern TIFFSeekProc TIFFGetSeekProc(TIFF*);
extern TIFFCloseProc TIFFGetCloseProc(TIFF*);
extern TIFFSizeProc TIFFGetSizeProc(TIFF*);
extern TIFFMapFileProc TIFFGetMapFileProc(TIFF*);
extern TIFFUnmapFileProc TIFFGetUnmapFileProc(TIFF*);
extern uint32 TIFFCurrentRow(TIFF*);
extern tdir_t TIFFCurrentDirectory(TIFF*);
extern tdir_t TIFFNumberOfDirectories(TIFF*);
extern uint32 TIFFCurrentDirOffset(TIFF*);
extern tstrip_t TIFFCurrentStrip(TIFF*);
extern ttile_t TIFFCurrentTile(TIFF*);
extern int TIFFReadBufferSetup(TIFF*, tdata_t, tsize_t);
extern int TIFFWriteBufferSetup(TIFF*, tdata_t, tsize_t);
extern int TIFFSetupStrips(TIFF *);
extern int TIFFWriteCheck(TIFF*, int, const char *);
extern int TIFFCreateDirectory(TIFF*);
extern int TIFFLastDirectory(TIFF*);
extern int TIFFSetDirectory(TIFF*, tdir_t);
extern int TIFFSetSubDirectory(TIFF*, uint32);
extern int TIFFUnlinkDirectory(TIFF*, tdir_t);
extern int TIFFSetField(TIFF*, ttag_t, ...);
extern int TIFFVSetField(TIFF*, ttag_t, va_list);#if defined(c_plusplus) || defined(__cplusplus)
extern void TIFFPrintDirectory(TIFF*, FILE*, long = 0);
extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t = 0);
extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int = 0);
extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*,
int = ORIENTATION_BOTLEFT, int = 0);
#else
extern void TIFFPrintDirectory(TIFF*, FILE*, long);
extern int TIFFReadScanline(TIFF*, tdata_t, uint32, tsample_t);
extern int TIFFWriteScanline(TIFF*, tdata_t, uint32, tsample_t);
extern int TIFFReadRGBAImage(TIFF*, uint32, uint32, uint32*, int);
extern int TIFFReadRGBAImageOriented(TIFF*, uint32, uint32, uint32*, int, int);
#endifextern TIFF* TIFFOpen(const char*, const char*);
# ifdef __WIN32__
extern TIFF* TIFFOpenW(const wchar_t*, const char*);
# endif /* __WIN32__ */
extern const char* TIFFSetFileName(TIFF*, const char *);
extern void TIFFError(const char*, const char*, ...);
extern void TIFFWarning(const char*, const char*, ...);
extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler);
extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler);
extern TIFFExtendProc TIFFSetTagExtender(TIFFExtendProc);#ifdef LOGLUV_PUBLIC
#define U_NEU 0.210526316
#define V_NEU 0.473684211
#define UVSCALE 410.
extern double LogL16toY(int);
extern double LogL10toY(int);
extern void XYZtoRGB24(float*, uint8*);
extern int uv_decode(double*, double*, int);
extern void LogLuv24toXYZ(uint32, float*);
extern void LogLuv32toXYZ(uint32, float*);
#if defined(c_plusplus) || defined(__cplusplus)
extern int LogL16fromY(double, int = SGILOGENCODE_NODITHER);
extern int LogL10fromY(double, int = SGILOGENCODE_NODITHER);
extern int uv_encode(double, double, int = SGILOGENCODE_NODITHER);
extern uint32 LogLuv24fromXYZ(float*, int = SGILOGENCODE_NODITHER);
extern uint32 LogLuv32fromXYZ(float*, int = SGILOGENCODE_NODITHER);
#else
extern int LogL16fromY(double, int);
extern int LogL10fromY(double, int);
extern int uv_encode(double, double, int);
extern uint32 LogLuv24fromXYZ(float*, int);
extern uint32 LogLuv32fromXYZ(float*, int);
#endif
#endif /* LOGLUV_PUBLIC */
#if defined(c_plusplus) || defined(__cplusplus)
extern "C" {但是没有扩回的地方,感觉还是extern "C"的地方有问题,你把你两个工程的编译选项命令行再贴出来吧,还有调用部分的代码也贴出来。
UILD: Computing Include file dependencies:
BUILD: Examining c:\downloads\w2kprintdrvsample\src\uni directory for files to compile.
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\winbase.h: cannot find include file <macwin32.h>
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\wingdi.h: cannot find include file <macwin32.h>
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\winuser.h: cannot find include file <macwin32.h>
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\winnls.h: cannot find include file <macwin32.h>
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\winreg.h: cannot find include file <macwin32.h>
BUILD: c:\downloads\w2kprintdrvsample\src\uni\precomp.h: g:\ntddk\inc\mmsystem.h: cannot find include file <macwin32.h>
Linking c:\downloads\w2kprintdrvsample\src\uni directory ********************
'nmake.exe /c BUILDMSG=Stop. -i LINKONLY=1 NOPASS0=1 NTTEST= UMTEST= MAKEDLL=1 386=1'
link -out:..\i386\UNI.dll -machine:ix86 @C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\nma02156.
Microsoft (R) Incremental Linker Version 5.12.8181
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.-STACK:262144,4096
-MERGE:_PAGE=PAGE
-MERGE:_TEXT=.text
-SECTION:INIT,d
-OPT:REF
-OPT:ICF
-IGNORE:4001,4037,4039,4044,4065,4070,4078,4087,4089,4198
-INCREMENTAL:NO
-FULLBUILD
-FORCE:MULTIPLE
-NOCOMMENT
/release
-NODEFAULTLIB
-debug:FULL
-debugtype:cv
-version:5.00
-osversion:5.00
-merge:.rdata=.text
-dll
-optidata
-base:0x70000000
-subsystem:console,4.10
-entry:_DllMainCRTStartup@12
objchk\i386\precomp.obj
..\i386\UNI.exp
objchk\i386\uni.res
objchk\i386\color.obj
objchk\i386\ddiblt.obj
objchk\i386\ddicntl.obj
objchk\i386\ddipath.obj
objchk\i386\dditext.obj
objchk\i386\debug.obj
objchk\i386\devmode.obj
objchk\i386\dlgclbk.obj
objchk\i386\dllentry.obj
objchk\i386\enable.obj
objchk\i386\globals.obj
objchk\i386\imgproc.obj
objchk\i386\intrface.obj
objchk\i386\output.obj
g:\NTDDK\libchk\i386\msvcrt.lib
g:\NTDDK\libchk\i386\ntdll.lib
g:\NTDDK\libchk\i386\kernel32.lib
g:\NTDDK\libchk\i386\user32.lib
g:\NTDDK\libchk\i386\gdi32.lib
g:\NTDDK\libchk\i386\comdlg32.lib
g:\NTDDK\libchk\i386\umpdddi.lib
g:\NTDDK\libchk\i386\uuid.lib
g:\NTDDK\libchk\i386\libtiff.lib
output.obj : error LNK2001: unresolved external symbol _TIFFClose@4
output.obj : error LNK2001: unresolved external symbol _TIFFWriteEncodedStrip@16
output.obj : error LNK2001: unresolved external symbol _TIFFOpen@8
..\i386\UNI.dll : fatal error LNK1120: 3 unresolved externals
cl /nologo /Ox /MD /GX /W3 -I. -DCHECK_JPEG_YCBCR_SUBSAMPLING -DDEFAUL
T_EXTRASAMPLE_AS_ALPHA -DSTRIPCHOP_DEFAULT=TIFF_STRIPCHOP -DLOGLUV_SUPPORT -DNEX
T_SUPPORT -DTHUNDER_SUPPORT -DLZW_SUPPORT -DPACKBITS_SUPPORT -DCCITT_SUPPORT -DT
IF_PLATFORM_CONSOLE -DFILLODER_LSB2MSB /c tif_win32.c
tif_win32.clink /nologo /dll /def:libtiff.def /out:libtiff.dll /implib:libtiff_i.lib
TIFFSetField(image, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
TIFFWriteEncodedStrip(image, 0, buf, width * height); TIFFClose(image);
2. 确认在主工程中添加.lib文件,应该就可以了。一个提示:
extern "C" 和 extern的区别。
extern "C"是按照C编译语法习惯来编译函数,比如void a(int)被翻译成@a(只是举个例子,实际形式不同的编译器会有不同);而extern是按照C++编译语法习惯来编译函数,上面的函数就变成了@a_int4(只是举个例子,实际形式不同的编译器会有不同),这也就是为什么C++有多态而C中没有的原因。解决问题的方法:
相信自己,缩小范围。
不要过分依赖别人,相信自己能够解决这个问题。调试程序最重要的就是缩小范围,这样注意力比较容易集中,能将问题的要点精简出来,也好让大家帮你分析。
查出到底是lib中有问题还是主程序有问题,最好的办法就是使用dll动态的载入方式,看看lib中有没有输出该函数,包括返回值和参数。如果有问题,是哪个函数有问题,为什么会有问题?怎么样才能没问题?.....Good Lucky!
output.obj() : error LNK2001: unresolved external symbol "void __stdcall TIFFClo
se(struct tiff *)" (?TIFFClose@@YGXPAUtiff@@@Z)
output.obj() : error LNK2001: unresolved external symbol "long __stdcall TIFFWri
teEncodedStrip(struct tiff *,unsigned long,void *,long)" (?TIFFWriteEncodedStrip
@@YGJPAUtiff@@KPAXJ@Z)
output.obj() : error LNK2001: unresolved external symbol "int __cdecl TIFFSetFie
ld(struct tiff *,unsigned long,...)" (?TIFFSetField@@YAHPAUtiff@@KZZ)
output.obj() : error LNK2001: unresolved external symbol "struct tiff * __stdcal
l TIFFOpen(char const *,char const *)" (?TIFFOpen@@YGPAUtiff@@PBD0@Z)TIFFSetField 在加上extern "C"是可以找到的函数.问题是没有找到的函数前都是__stdcall ,加extern "C"可以找到的函数是 __cdecl ,这个怎么修改?
extern __cdecl void TIFFError(const char*, const char*, ...);