Visualizzazione dei risultati da 1 a 8 su 8

Discussione: errore linker

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    errore linker

    ciao.
    Ho una libreria .lib inclusa in un applicazione.
    quando la includo nell applicazione e compilo mi da degli errori linker del tipo:

    Error 86 error LNK2001: unresolved external symbol __imp__DefWindowProcA@16 C:\programmazione\new\GeometricTools\WildMagic4\Sa mpleGraphics\DynamicTextures\Wm4WglApplication90.l ib(TreeControl.obj)

    o
    Error 90 error LNK2001: unresolved external symbol __imp__ShowWindow@8 C:\programmazione\new\GeometricTools\WildMagic4\Sa mpleGraphics\DynamicTextures\Wm4WglApplication90.l ib(TreeControl.obj)

    ho compilato l'applicazione con l'opzione /MD(multithreaded debug dll) e la libreria con l'opzione /MD , gli errori persistono poi
    ho compilato l'applicazione con l'opzione /MT(multithreader) e la libreria con l'opzione /MT niente, gli errori persistono .


    cosa sbaglio?
    uso vs 2010.

  2. #2
    Ti dà errori di questo genere su tutte le API di Windows di gestione delle finestre?
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    non ci ho fatto caso, è una libreria che crea un applicazione opengl ,gestendo anche le finestre ma, non riesco a capire se è un problema opengl o come haidetto delle api , che cosa hai visto e pensato?
    cosa sono quegli _imp_ davanti alle funzioni
    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    questo per intenderci è uno spezzone del .cpp dove penso si creino gli errori del linker.

    codice:
    void WindowApplication::SetMousePosition (int iX, int iY)
    {
        HWND hWnd = (HWND)IntToPtr(m_iWindowID);
        POINT kPoint;
        kPoint.x = (LONG)iX;
        kPoint.y = (LONG)iY;
        ClientToScreen(hWnd,&kPoint);
        SetCursorPos(kPoint.x,kPoint.y);
    }
    //----------------------------------------------------------------------------
    void WindowApplication::GetMousePosition (int& riX, int& riY) const
    {
        HWND hWnd = (HWND)IntToPtr(m_iWindowID);
        POINT kPoint;
        GetCursorPos(&kPoint);
        ScreenToClient(hWnd,&kPoint);
        riX = (int)kPoint.x;
        riY = (int)kPoint.y;
    }
    //----------------------------------------------------------------------------
    int WindowApplication::GetStringWidth (const char* acText) const
    {
        if (!acText || strlen(acText) == 0)
        {
            return 0;
        }
    
        HWND hWnd = (HWND)IntToPtr(m_iWindowID);
        HDC hDC = GetDC(hWnd);
        SIZE kSize;
        GetTextExtentPoint32(hDC,acText,(int)strlen(acText),&kSize);
        ReleaseDC(hWnd,hDC);
        return (int)kSize.cx;
    }
    //----------------------------------------------------------------------------
    int WindowApplication::GetCharacterWidth (const char cCharacter) const
    {
        HWND hWnd = (HWND)IntToPtr(m_iWindowID);
        HDC hDC = GetDC(hWnd);
        SIZE kSize;
        GetTextExtentPoint32(hDC,&cCharacter,1,&kSize);
        ReleaseDC(hWnd,hDC);
        return (int)kSize.cx;
    }
    //----------------------------------------------------------------------------
    int WindowApplication::GetFontHeight () const
    {
        HWND hWnd = (HWND)IntToPtr(m_iWindowID);
        HDC hDC = GetDC(hWnd);
        TEXTMETRIC kMetric;
        GetTextMetrics(hDC,&kMetric);
        ReleaseDC(hWnd,hDC);
        return (int)kMetric.tmHeight;
    }
    //----------------------------------------------------------------------------
    LRESULT CALLBACK MsWindowEventHandler (HWND hWnd, UINT uiMsg, WPARAM wParam,
        LPARAM lParam)
    {
        WindowApplication* pkTheApp =
            (WindowApplication*)Application::TheApplication;
    
        if (!pkTheApp || !pkTheApp->GetWindowID())
        {
            return DefWindowProc(hWnd,uiMsg,wParam,lParam);
        }
    
        switch (uiMsg) 
        {
            case WM_PAINT:
            {
                PAINTSTRUCT kPS;
                BeginPaint(hWnd,&kPS);
                pkTheApp->OnDisplay();
                EndPaint(hWnd,&kPS);
                return 0;
            }
            case WM_ERASEBKGND:
            {
                // This tells Windows not to erase the background (and that the
                // application is doing so).
                return 1;
            }
            case WM_MOVE:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMove(iXPos,iYPos);
                return 0;
            }
            case WM_SIZE:
            {
                int iWidth = int(LOWORD(lParam));
                int iHeight = int(HIWORD(lParam));
                pkTheApp->OnResize(iWidth,iHeight);
                return 0;
            }
            case WM_CHAR:
            {
                unsigned char ucKey = (unsigned char)(char)wParam;
    
                // quit application if the KEY_TERMINATE key is pressed
                if (ucKey == pkTheApp->KEY_TERMINATE)
                {
                    PostQuitMessage(0);
                    return 0;
                }
    
                // get the cursor position in client coordinates
                POINT kPoint;
                GetCursorPos(&kPoint);
                ScreenToClient(hWnd,&kPoint);
                int iXPos = (int)kPoint.x;
                int iYPos = (int)kPoint.y;
    
                pkTheApp->OnKeyDown(ucKey,iXPos,iYPos);
                return 0;
            }
            case WM_KEYDOWN:
            {
                int iVirtKey = int(wParam);
    
                // get cursor position client coordinates
                POINT kPoint;
                GetCursorPos(&kPoint);
                ScreenToClient(hWnd,&kPoint);
                int iXPos = (int)kPoint.x;
                int iYPos = (int)kPoint.y;
    
                if ((VK_F1 <= iVirtKey && iVirtKey <= VK_F12)
                ||  (VK_PRIOR <= iVirtKey && iVirtKey <= VK_DOWN)
                ||  (iVirtKey == VK_INSERT) || (iVirtKey == VK_DELETE))
                {
                    pkTheApp->OnSpecialKeyDown(iVirtKey,iXPos,iYPos);
                }
                return 0;
            }
            case WM_KEYUP:
            {
                int iVirtKey = int(wParam);
    
                // get the cursor position in client coordinates
                POINT kPoint;
                GetCursorPos(&kPoint);
                ScreenToClient(hWnd,&kPoint);
                int iXPos = (int)kPoint.x;
                int iYPos = (int)kPoint.y;
    
                if ((VK_F1 <= iVirtKey && iVirtKey <= VK_F12)
                ||  (VK_PRIOR <= iVirtKey && iVirtKey <= VK_DOWN)
                ||  (iVirtKey == VK_INSERT) || (iVirtKey == VK_DELETE))
                {
                    pkTheApp->OnSpecialKeyUp(iVirtKey,iXPos,iYPos);
                }
                else
                {
                    pkTheApp->OnKeyUp((unsigned char)iVirtKey,iXPos,iYPos);
                }
                return 0;
            }
            case WM_LBUTTONDOWN:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_LEFT_BUTTON,
                    WindowApplication::MOUSE_DOWN,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_LBUTTONUP:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_LEFT_BUTTON,
                    WindowApplication::MOUSE_UP,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_MBUTTONDOWN:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_MIDDLE_BUTTON,
                    WindowApplication::MOUSE_DOWN,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_MBUTTONUP:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_MIDDLE_BUTTON,
                    WindowApplication::MOUSE_UP,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_RBUTTONDOWN:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_RIGHT_BUTTON,
                    WindowApplication::MOUSE_DOWN,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_RBUTTONUP:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                pkTheApp->OnMouseClick(WindowApplication::MOUSE_RIGHT_BUTTON,
                    WindowApplication::MOUSE_UP,iXPos,iYPos,PtrToUint(wParam));
                return 0;
            }
            case WM_MOUSEMOVE:
            {
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
    
                int iButton = -1;
                if (wParam & MK_LBUTTON)
                {
                    iButton = WindowApplication::MOUSE_LEFT_BUTTON;
                }
                else if (wParam & MK_MBUTTON)
                {
                    iButton = WindowApplication::MOUSE_MIDDLE_BUTTON;
                }
                else if (wParam & MK_RBUTTON)
                {
                    iButton = WindowApplication::MOUSE_RIGHT_BUTTON;
                }
    
                if (iButton >= 0)
                {
                    pkTheApp->OnMotion(iButton,iXPos,iYPos,PtrToUint(wParam));
                }
                else
                {
                    pkTheApp->OnPassiveMotion(iXPos,iYPos);
                }
    
                return 0;
            }
            case WM_MOUSEWHEEL:
            {
                short sWParam = (short)(HIWORD(wParam));
                int iDelta = ((int)sWParam)/WHEEL_DELTA;
                int iXPos = int(LOWORD(lParam));
                int iYPos = int(HIWORD(lParam));
                unsigned int uiModifiers = (unsigned int)(LOWORD(wParam));
                pkTheApp->OnMouseWheel(iDelta,iXPos,iYPos,uiModifiers);
                return 0;
            }
            case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }
        }
    
        return DefWindowProc(hWnd,uiMsg,wParam,lParam);
    }
    //----------------------------------------------------------------------------
    int WindowApplication::Main (int, char**)
    {
        WindowApplication* pkTheApp = (WindowApplication*)TheApplication;
        pkTheApp->KEY_TERMINATE = WindowApplication::KEY_ESCAPE;

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    e questo il .inl con le dichiarazioni:
    codice:
    // Geometric Tools, LLC
    // Copyright (c) 1998-2010
    // Distributed under the Boost Software License, Version 1.0.
    // http://www.boost.org/LICENSE_1_0.txt
    // http://www.geometrictools.com/Licens...ICENSE_1_0.txt
    //
    // File Version: 4.10.0 (2009/11/18)
    
    //----------------------------------------------------------------------------
    inline const char* WindowApplication::GetWindowTitle () const
    {
        return m_acWindowTitle;
    }
    //----------------------------------------------------------------------------
    inline int WindowApplication::GetXPosition () const
    {
        return m_iXPosition;
    }
    //----------------------------------------------------------------------------
    inline int WindowApplication::GetYPosition () const
    {
        return m_iYPosition;
    }
    //----------------------------------------------------------------------------
    inline int WindowApplication::GetWidth () const
    {
        return m_iWidth;
    }
    //----------------------------------------------------------------------------
    inline int WindowApplication::GetHeight () const
    {
        return m_iHeight;
    }
    //----------------------------------------------------------------------------
    inline Renderer* WindowApplication::GetRenderer ()
    {
        return m_pkRenderer;
    }
    //----------------------------------------------------------------------------
    inline void WindowApplication::SetRenderer (Renderer* pkRenderer)
    {
        m_pkRenderer = pkRenderer;
    }
    //----------------------------------------------------------------------------
    inline void WindowApplication::SetWindowID (int iWindowID)
    {
        m_iWindowID = iWindowID;
    }
    //----------------------------------------------------------------------------
    inline int WindowApplication::GetWindowID () const
    {
        return m_iWindowID;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnPrecreate ()
    {
        // stub for derived classes
        return true;
    }
    //----------------------------------------------------------------------------
    inline void WindowApplication::OnDisplay ()
    {
        // stub for derived classes
    }
    //----------------------------------------------------------------------------
    inline void WindowApplication::OnIdle ()
    {
        // stub for derived classes
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnKeyDown (unsigned char, int, int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnKeyUp (unsigned char, int, int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnSpecialKeyDown (int, int, int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnSpecialKeyUp (int, int, int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnMouseClick (int, int, int, int, unsigned int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnMotion (int, int, int, unsigned int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnPassiveMotion (int, int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------
    inline bool WindowApplication::OnMouseWheel (int, int, int, unsigned int)
    {
        // stub for derived classes
        return false;
    }
    //----------------------------------------------------------------------------

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    si , effettivamente riguarda tutto cio' che è mouse/tastiera/finestre, penso che la libreria che contiene questo è windows.h ma non riesco a capire, è inclusa nella libreria a cui mi linco , una .lib

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    risolto , mancavano come ho visto dalla command line confrontando con un altro progetto i vari "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" ecc...
    .
    Ma cosa sono e cosa vogliono dire i vari prefissi negli errori del linker, per es:

    Error 20 error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??0?$basic_string@DU?$char_traits@D@std@@V? $allocator@D@2@@std@@QAE@ABV01@@Z) C:\programmazione\new\GeometricTools\WildMagic4\Sa mpleGraphics\DynamicTextures\ARToolKitPlus.lib(rpp .obj)
    tra l'altro non riesco a trarre informazioni dal precedente errore mi aiutate?sono sempre cosi criptici gli errori del linker?

    nei file della libreria degli errori c'è un codice tipo:
    codice:
    #if defined(_MSC_VER) || defined(_WIN32_WCE)
    
    #ifdef LIBRPP_STATIC
    #  define LIBRPP_API
    #elif LIBRPP_DLL
    #  ifdef LIBRPP_EXPORTS
    #    define LIBRPP_API __declspec(dllexport)
    #  else
    #    define LIBRPP_API __declspec(dllimport)
    #  endif
    #else
    #  pragma error ("please define either LIBRPP_STATIC or LIBRPP_DLL")
    #endif
    
    #else
    // for linux
    #define LIBRPP_API
    
    #endif
    ps.

    cosa sono i prefissi:
    __declspec(dllimport) o ad es __imp ecc...

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    penso di aver trovato il problema:
    se commento questa riga:
    m_pTracker = new TrackerMultiMarkerImpl<6 , 6 , 6 , 10, 10>(320,240);

    non mi da piu gli errori del linker , chiaramente non funziona , ma perchè??
    forse è perchè i template agiscono a livello di compilazione?
    cosa puo essere?
    grazie.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.