error LNK2001: unresolved external symbol ___CxxFrameHandler3

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




Answer this question

error LNK2001: unresolved external symbol ___CxxFrameHandler3

  • Devon_Custard

    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



  • M Thorman

    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



  • Ronaldlee Ejalu

    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



  • ForgeAus

    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



  • Rajiv Bose

    You can disable the "enable c++ Exceptions" option for the given source file.

  • Shashi.kiran

    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 )



  • road66_be

    Please avoid headers or libs from previous releases as that is an unsupported scenario.

    Thanks,
    Ayman Shoukry
    VC++ Team


  • MarkMadd

    I see what you mean. Gives me something to work with, thanks.
  • Tim Murphy

    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



  • AngelaC

    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



  • error LNK2001: unresolved external symbol ___CxxFrameHandler3