none
error LNK2001: unresolved external symbol ___CxxFrameHandler3

    Question

  • Hi,

    I am working on a project to migrate a program from 32-bit to 64-bit. The program works fine on 32-bit machine under VC 7, but when I tried to compile it in VC 8 on a 64-bit machine, I received the following linking error:

    error LNK2001: unresolved external symbol __CxxFrameHandler3

    What is the possible cause for this error and how to fix it?

    (i have already tried the suggestions posted in

    http://forums.microsoft.com/msdn/showpost.aspx?postid=153127&SiteID=1

     but still can't fix the problem)

    Thanks

    Matthew

    Friday, January 13, 2006 8:53 AM

Answers

  • You are probably linking with the wrong LIB path.  __CxxFrameHandler3 is the exception handler in the CRT which the OS calls to handle the C++ EH code in you app.

    So make sure LIB is set correctly, and try linking with /verbose.  It will show you more info on the libs the linker is trying to pull in.

     

    Louis Lafreniere

    VC++ compiler dev

    Friday, January 13, 2006 7:42 PM

All replies

  • You are probably linking with the wrong LIB path.  __CxxFrameHandler3 is the exception handler in the CRT which the OS calls to handle the C++ EH code in you app.

    So make sure LIB is set correctly, and try linking with /verbose.  It will show you more info on the libs the linker is trying to pull in.

     

    Louis Lafreniere

    VC++ compiler dev

    Friday, January 13, 2006 7:42 PM
  • Thank you for reply,

    i have already used your suggestion to try solve my problem ,but can't fix the problem ,i tried to link with  /verbose ,but can't discover the special error ,have you other suggest to make me to solve my problem ?

     

    thanks

     

    Matthew

    Saturday, January 14, 2006 2:20 PM
  • Hi there,

    I have linked the VC 6 version's basetsd.h in my VC 8 project, would that cause the linking error I mentioned in the previous thread.

     

     Matthew

    Monday, January 16, 2006 1:31 AM
  • Please avoid headers or libs from previous releases as that is an unsupported scenario.

    Thanks,
    Ayman Shoukry
    VC++ Team
    Monday, January 16, 2006 5:15 PM
  • Ayman is right but I doubt it's the cause of your problems.  Did you verify your LIB path to make sure you are linking to the right libs? 

    The error you are getting indicates that you are not linking with the 64bit CRT.  So maybe your LIN environment variable is pointing to the x86 libs, maybe it just has an incorrect path, maybe you are compiling with /Zl, etc...

    Louis Lafreniere

    VC++ Compiler back-end Dev

     

    Tuesday, January 17, 2006 7:27 PM
  • I get the same linker error.

    What I gather from your comments is that VC2005's generating code that locks it to the RTL libraries that shipped with VC2005 so, it's not possible to generate an MFC42 application from VC2005? Is that correct?

    The linker error is because the compiler is embedding references to a function that only exist in newer versions of the RTL?

    Loaded msvcrtd.lib(MSVCRTD.dll)
          Found ___CxxFrameHandler

    I see this when I use VC6

     


     

     

    Wednesday, January 18, 2006 6:22 AM
  • I'm not quite sure what the answer is for MFC, but for the CRT, you definitively need to make sure that its version is the same or newer than the compiler that you are using.

    The compiler has a lot of helper functions in the CRT, so older CRT will be missing helpers that may be needed by newer compiler.  For example, __CxxFrameHandler4 is a new helper that was added in VS2005.

     

    Louis Lafreniere

    VC++ Compiler back-end dev

    Wednesday, January 18, 2006 7:52 AM
  • I see what you mean. Gives me something to work with, thanks.
    Wednesday, January 18, 2006 2:47 PM
  • You can disable the "enable c++ Exceptions" option for the given source file.
    Thursday, February 09, 2006 12:01 AM
  • Thank every one to reply me ,

    I had already solved this problem ,the reason that make me have this problem is i changed the VC 8 default library ever, because my project have some components need the old VC version library .So, make me appear this linker error ,

    If you migrate the project from VC 6 to VC7 or VC8,don't change the complier default library and don't link the old version library will be better!

     

     

    Thank

    Matthew

    (^^, English poor,everyone hard to understand,sorry )

    Friday, February 10, 2006 8:12 AM