'warring'에 해당되는 글 1건

  1. 2008.06.25 LNK 4099 에러관련

LNK 4099 에러관련

2008.06.25 11:58 from WinCE

CE타겟을 빌드시 다음 에러가 발생하는 경우가 있다.

Warning 1 warning LNK4099: PDB 'libbmtd.pdb' was not found with 'C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\ARMV4I\LIBCMTD.lib' or at 'c:\Local Development\Visual C# 2005 Projects\StatusMWS\SCCECamera\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\libbmtd.pdb'; linking object as if no debug info LIBCMTD.lib

Warning 2 warning LNK4099: PDB 'libbmtd.pdb' was not found with 'C:\Program Files\Microsoft Visual Studio 8\VC\ce\lib\ARMV4I\LIBCMTD.lib' or at 'c:\Local Development\Visual C# 2005 Projects\StatusMWS\SCCECamera\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\libbmtd.pdb'; linking object as if no debug info LIBCMTD.lib

이 에러는 링크 옵션 ignore으로 제거되지 않는다.


아래의 내용을 확인해보면 Unignorable Warnings중 하나 이기 때문이다.

http://www.geoffchappell.com/studies/msvc/link/link/options/ignore.htm

LINK /IGNORE

This option directs LINK to ignore the specified warnings.

Syntax

/ignore:warning[[,warning]...]

At least one argument is required. All arguments must be numbers between 4000 and 4999 inclusive. It is a fatal error (LNK1147) if any argument does not evaluate satisfactorily.

The /ignore option is for the command line only. It is not valid as a directive in an object file.

Behaviour

In general, each of the specified warnings gets registered to be ignored. This means that should it occur, for whatever reason in whatever circumstances subsequent to the processing of this option, there will be no warning message and neither will its occurrence be treated as an error if the /wx option is active.

Unignorable Warnings

Some warning numbers are apparently too important to ignore:

LNK4017
%S statement not supported for the target platform

LNK4033
converting object format from OMF to COFF

LNK4044
unrecognized option '/%S'; ignored

LNK4062
'%S' not compatible with '%S' target machine; option ignored

LNK4075
ignoring '/%S' due to '/%S' specification

LNK4086
entrypoint '%S' is not __stdcall with 12 bytes of arguments; image may not run

LNK4088
image being generated due to /FORCE option; image may not run

LNK4099
PDB '%S' was not found with '%S' or at '%S'; linking object as if no debug info

LNK4105
no argument specified with option '/%S'; ignoring option

LNK4224
%S is no longer supported; ignored

LNK4228
'/%S' invalid for a DLL; ignored

LNK4229
invalid directive '/%S' encountered; ignored

To specify any of these in a /ignore option is not an error and brings no complaint. The specification is just not acted on. Should the specified warning ever occur, a warning message will still be displayed, and if the /wx option is active, the warning will still be promoted to an error.

Coding Error

As an aside, whichever of Microsoft’s programmers is currently in charge of LINK.EXE may care to note a small, presently inconsequential, coding error in the function that registers a warning number to be ignored. The unignorable warning numbers are defined as an array, with 12 members. In the loop that checks whether a warning number is in this array (and therefore not to be registered), the loop index presently runs to 48, i.e., to the sizeof the relevant array rather than to the number of elements in that array.

Not Quite Unignorable Warnings

For some warning numbers, specification in a /ignore option is accepted but not necessarily acted upon. Should the warning occur while the /wx option is not active, then the warning message is still displayed, but if the /wx option is active, then the warning is ignored. It is as if the warning is thought important enough to override an attempt at ignoring it, but not if the user has put too high a price on unignored warnings.

The following warning numbers are affected:

4200, 4203, 4204, 4205, 4206, 4207, 4208, 4209, 4219, 4231 and 4237

but note that 4208 can also occur in circumstances such that it is ignored independently of /wx.

Implicitly Ignored Warnings

There is presently one case of a warning being set to be ignored without the corresponding /ignore option being given explicitly. A side-effect of /subsystem:xbox is that warning 4078 gets registered internally as an ignored warning.

Comment

For who knows what reason, this obviously convenient switch is apparently undocumented. A corresponding switch for the compiler, /wd, has long been documented, as has a pragma for use in source code.

Though the /ignore switch may be undocumented, Microsoft has used it in the master makefiles for DDKs as far back as for NT 4.0. The warnings that Microsoft has found it necessary, or at least convenient, to disable in at least some cases when building device drivers over several DDK versions are:

LNK4001
no object files specified; libraries used

LNK4010
invalid version number %S; default version assumed

LNK4037
'%S' does not exist; ignored

LNK4039
section '%S' specified with /SECTION option does not exist

LNK4044
unrecognized option '/%S'; ignored

LNK4065
'%S' cannot be ordered; ignored

LNK4070
/OUT:%S directive in .EXP differs from output filename '%S'; ignoring directive

LNK4078
multiple '%S' sections found with different attributes (%08X)

LNK4087
CONSTANT keyword is obsolete; use DATA

LNK4088
image being generated due to /FORCE option; image may not run

LNK4089
all references to '%S' discarded by /OPT:REF

LNK4096
/BASE value '0x%X' is invalid for Windows 95 and Windows 98; image may not run

LNK4108
/ALIGN specified without /DRIVER or /VXD; image may not run

LNK4198
base key '%S' not found - using default

LNK4218
non-native module found; restarting link with /LTCG

LNK4221
no public symbols found; archive member will be inaccessible

LNK4235
/LTCG specified but no code generation required; remove /LTCG from the link command line to improve linker performance

물론 위와 같은 에러의 경우에는 아래 URL에서 설명된 것 처럼 Code generation의 Buffer Security Check를 끄면 Warring이 사라지지만 Buffer overflow 체크 기능도 같이 사라진다.

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=189726&SiteID=1

신고
Posted by NOP 트랙백 0 : 댓글 0

티스토리 툴바