Nieudana kompilacja, nierozpoznane elementy zewnętrzne

0

Wie ktoś o co mu chodzi?

1>------ Kompilacja rozpoczęta: Projekt: WindowsProject14, Konfiguracja: Debug x64 ------
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipCreatePen1 przywołany w funkcji "public: __cdecl Gdiplus::Pen::Pen(class Gdiplus::Color const &,float)" (??0Pen@Gdiplus@@QEAA@AEBVColor@1@M@Z)
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDeletePen przywołany w funkcji "public: __cdecl Gdiplus::Pen::~Pen(void)" (??1Pen@Gdiplus@@QEAA@XZ)
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipCreateFromHDC przywołany w funkcji "public: __cdecl Gdiplus::Graphics::Graphics(struct HDC__ *)" (??0Graphics@Gdiplus@@QEAA@PEAUHDC__@@@Z)
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDeleteGraphics przywołany w funkcji "public: __cdecl Gdiplus::Graphics::~Graphics(void)" (??1Graphics@Gdiplus@@QEAA@XZ)
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipSetSmoothingMode przywołany w funkcji "public: enum Gdiplus::Status __cdecl Gdiplus::Graphics::SetSmoothingMode(enum Gdiplus::SmoothingMode)" (?SetSmoothingMode@Graphics@Gdiplus@@QEAA?AW4Status@2@W4SmoothingMode@2@@Z)
1>WindowsProject14.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDrawLineI przywołany w funkcji "public: enum Gdiplus::Status __cdecl Gdiplus::Graphics::DrawLine(class Gdiplus::Pen const *,int,int,int,int)" (?DrawLine@Graphics@Gdiplus@@QEAA?AW4Status@2@PEBVPen@2@HHHH@Z)
1>K:\VC++_projects\WindowsProject14\x64\Debug\WindowsProject14.exe : fatal error LNK1120: liczba nierozpoznanych elementów zewnętrznych: 6
1>Kompilowanie projektu „WindowsProject14.vcxproj” wykonane — NIEPOWODZENIE.
4

Metodologia na biblioteki MS:

  1. Wpisujemy do wyszukiwarki MSDN + poszukiwana fraza np. Gdiplus::Pen
  2. W wyniku google zazwyczaj pojawia się strona MS np. https://learn.microsoft.com/en-us/windows/win32/api/gdipluspen/nl-gdipluspen-pen
  3. Przeklikujemy na dowolna metodę i szukamy requirements
  4. Zwracamy uwagę na Library Gdiplus.lib
  5. Zaglądamy do ustawien/kosnsoli/plikow log czy ta biblioteka jest (zalezy od IDE i preferencji , metodologi pracy) ,ale raczej jej nie bedzie
  6. Dodajemy do ustawien, wyklikujemy albo dopisujemy w pliku (zalezy od IDE i preferencji , metodologi pracy)
  7. robimy herbatę owocową aby uczcić kolejny mały sukces
1

Pierwszym krokiem powinno być google: LNK2019
Brakuje definicji elementów klasy: Gdiplus::Pen
Jeśli to twoja klasa to:

  • nie napisałeś implementacji Gdiplus::Pen::Pen Gdiplus::Pen::~Pen ....
  • nie dołączyłeś źródła z implementacją do procesu budowania.
  • gdzieś się wkradł lub przepadł modyfikator API (np brakujące __cdecl albo nadmiarowe extern "C") itp - ale tu kopilator powinien sotrzegać

Jeśli to nie twoja klasa:

  • to nie zlikowałeś biblioteki do swojego projektu
  • linker nie był w stanie znaleźć biblioteki (a ty nie pokazałeś tego błedu).
0

@kq: Co gdzie kliknąć?
111111a.jpg

2

Lepiej używać wersji angielskiej :)
Konsolidator->Dane wejsciowe

0
Adamek Adam napisał(a):

Lepiej używać wersji angielskiej :)
Konsolidator->Dane wejsciowe

111111a.jpg

0

Przykład ze strony microsoftu. 111111a.jpg

Rozpoczęto kompilację...
1>------ Kompilacja rozpoczęta: Projekt: WindowsProject15, Konfiguracja: Debug x64 ------
1>WindowsProject15.cpp
1>K:\VC++_projects\WindowsProject15\WindowsProject15.cpp(65,15): warning C4244: "return": konwersja z "WPARAM" do "int", możliwa utrata danych
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdiplusStartup przywołany w funkcji WinMain
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdiplusShutdown przywołany w funkcji WinMain
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipCreatePen1 przywołany w funkcji "public: __cdecl Gdiplus::Pen(class Gdiplus::Color const &,float)" (??0Pen@Gdiplus@@QEAA@AEBVColor@1@M@Z)
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDeletePen przywołany w funkcji "public: cdecl Gdiplus::~Pen(void)" (??1Pen@Gdiplus@@QEAA@XZ)
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipCreateFromHDC przywołany w funkcji "public: cdecl Gdiplus::Graphics(struct HDC *)" (??0Graphics@Gdiplus@@QEAA@PEAUHDC
@@@Z)
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDeleteGraphics przywołany w funkcji "public: __cdecl Gdiplus::~Graphics(void)" (??1Graphics@Gdiplus@@QEAA@XZ)
1>WindowsProject15.obj : error LNK2019: nierozpoznany symbol zewnętrzny GdipDrawLineI przywołany w funkcji "public: enum Gdiplus::Status __cdecl Gdiplus::DrawLine(class Gdiplus::Pen const *,int,int,int,int)" (?DrawLine@Graphics@Gdiplus@@QEAA?AW4Status@2@PEBVPen@2@HHHH@Z)
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x64\gdiplus.lib : warning LNK4272: wystąpił konflikt typu maszyny biblioteki „ARM64” z typem maszyny docelowej „x64”
1>K:\VC++_projects\WindowsProject15\x64\Debug\WindowsProject15.exe : fatal error LNK1120: liczba nierozpoznanych elementów zewnętrznych: 7
1>Kompilowanie projektu „WindowsProject15.vcxproj” wykonane — NIEPOWODZENIE.
========== Kompilacja: sukces — 0, niepowodzenie — 1, aktualne — 0, pominięto — 0 ==========
========== upłynęło 00:10,239 =========

//#define _AFXDLL
//#include "stdafx.h"
#include <windows.h>
#include <objidl.h>
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment (lib,"Gdiplus.lib")

VOID OnPaint(HDC hdc)
{
    Graphics graphics(hdc);
    Pen      pen(Color(255, 0, 0, 255));
    graphics.DrawLine(&pen, 0, 0, 200, 100);
}

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, INT iCmdShow)
{
    HWND                hWnd;
    MSG                 msg;
    WNDCLASS            wndClass;
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR           gdiplusToken;

    // Initialize GDI+.
    GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = hInstance;
    wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = TEXT("GettingStarted");

    RegisterClass(&wndClass);

    hWnd = CreateWindow(
        TEXT("GettingStarted"),   // window class name
        TEXT("Getting Started"),  // window caption
        WS_OVERLAPPEDWINDOW,      // window style
        CW_USEDEFAULT,            // initial x position
        CW_USEDEFAULT,            // initial y position
        CW_USEDEFAULT,            // initial x size
        CW_USEDEFAULT,            // initial y size
        NULL,                     // parent window handle
        NULL,                     // window menu handle
        hInstance,                // program instance handle
        NULL);                    // creation parameters

    ShowWindow(hWnd, iCmdShow);
    UpdateWindow(hWnd);

    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    GdiplusShutdown(gdiplusToken);
    return msg.wParam;
}  // WinMain

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
    WPARAM wParam, LPARAM lParam)
{
    HDC          hdc;
    PAINTSTRUCT  ps;

    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        OnPaint(hdc);
        EndPaint(hWnd, &ps);
        return 0;
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
} // WndProc
0

@johnny_Be_good czytałeś to co wkleiłeś ?
warning LNK4272: wystąpił konflikt typu maszyny biblioteki „ARM64” z typem maszyny docelowej „x64”

masz bibliotekę ARM64 a kompilujesz X64

0

Nie mogę bez tego antyalisingu zrobić.

0

ja w Twoim kodzie nie widze aliasingu i w wyniku działania aplikacji też nie widzę :D
image

0

@Adamek Adam:
Build started...
1>------ Build started: Project: WindowsProject16, Configuration: Debug x64 ------
1>WindowsProject16.cpp
1>K:\VC++_projects\WindowsProject16\WindowsProject16.cpp(64,15): warning C4244: 'return': conversion from 'WPARAM' to 'int', possible loss of data
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdiplusStartup referenced in function WinMain
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdiplusShutdown referenced in function WinMain
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdipCreatePen1 referenced in function "public: __cdecl Gdiplus::Pen(class Gdiplus::Color const &,float)" (??0Pen@Gdiplus@@QEAA@AEBVColor@1@M@Z)
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdipDeletePen referenced in function "public: cdecl Gdiplus::~Pen(void)" (??1Pen@Gdiplus@@QEAA@XZ)
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdipCreateFromHDC referenced in function "public: cdecl Gdiplus::Graphics(struct HDC *)" (??0Graphics@Gdiplus@@QEAA@PEAUHDC
@@@Z)
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdipDeleteGraphics referenced in function "public: __cdecl Gdiplus::~Graphics(void)" (??1Graphics@Gdiplus@@QEAA@XZ)
1>WindowsProject16.obj : error LNK2019: unresolved external symbol GdipDrawLineI referenced in function "public: enum Gdiplus::Status __cdecl Gdiplus::DrawLine(class Gdiplus::Pen const *,int,int,int,int)" (?DrawLine@Graphics@Gdiplus@@QEAA?AW4Status@2@PEBVPen@2@HHHH@Z)
1>C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x64\Gdiplus.lib : warning LNK4272: library machine type 'ARM64' conflicts with target machine type 'x64'
1>K:\VC++_projects\WindowsProject16\x64\Debug\WindowsProject16.exe : fatal error LNK1120: 7 unresolved externals
1>Done building project "WindowsProject16.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Elapsed 00:08,275 ==========

0

Otwórz w 7zip plik C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x64\Gdiplus.lib

poszukaj 1.txt i pokaż
image

napisales o kopiowaniu Gdiplus.lib , może namieszałeś !!!

0

@Adamek Adam: Rozumiem, że robię to co trzeba.
111111a.jpg

0

trudno ocenić ,
odinstalowanie arm64 nie spowoduje że zacznie Ci działać x64 jeżeli omyłkowo skopiowałeś w złe miejsce lib bo akurat miales kilka okien otwartych :(
VS ma swój instalator "visual studio installer" a tu widzę instalator WSDK dla mnie to trochę inne narzędzia

0
Adamek Adam napisał(a):

trudno ocenić ,
odinstalowanie arm64 nie spowoduje że zacznie Ci działać x64 jeżeli omyłkowo skopiowałeś w złe miejsce lib bo akurat miales kilka okien otwartych :(
VS ma swój instalator "visual studio installer" a tu widzę instalator WSDK dla mnie to trochę inne narzędzia

To install Windows Software Development Kit for Windows 10 Version 2004 (10.0.19041.685) (Debugging Tools), run the following command from the command line or from PowerShell:
Mam coś takiego - usuwać?
To są chyba tylko debbuging tools.
Na razie próbuję naprawić, jak nic nie da usunę.
Wygląda na to, że zainstalowałem to sobie dla windows11 a mam 10
Niby może nie powinno mieć wpływu ale kompilator krzyczał, że coś nie tak.
No instalowałem to , jest podświetlenie.
111111a.jpg
111111a.jpg

0

Nie czytasz komunikatów kompilatora !
'C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.34.31933\lib\x64\Gdiplus.lib'
To plik VS 2022 , wiec jeżeli coś odinstalować to w ostatecznosci VS 2022 :)
Ja bym jednak sprawdził ten plik Gdiplus.lib czy rzeczywiscie jest na ARM-a , kompilator chyba nie oszukuje :)

0

@Adamek Adam: a widzisz jaki przydatny jesteś, o tym nie pomyślałem. Uruchomię instalatora Visual Studio i dam mu opcję "repair".
xD
Zmieniłem target docelowy z x64 na x86
111111a.jpg

0

To już jesteś pełnoprawnym programistą :D

0
Adamek Adam napisał(a):

To już jesteś pełnoprawnym programistą :D

Bo wiesz, człowiek się uparł że będzie korzystał z devexpress tych kontrolek, a ja stwierdziłem, że ja to zrobię lepiej. Ale mi nie wychodziło, bo tego antyalisngu nie miałem. Teraz to mogę poszaleć xD

1 użytkowników online, w tym zalogowanych: 0, gości: 1