Problem z plikiem makefile tworzonym przez kompilator

0

Mam taki oto problem:
Zrobiłem projekt w devcpp, który nie dość, że się kompilował to jeszcze ładnie działał. Potem wprowadziłem w nim zmiany i skompilowałem projekt. Projekt jednak wyglądał tak samo jak wcześniej. To w sumie częsty błąd więc zrobiłem to co normalnie robię w takich przypadkach, czyli usunąłem wszystkie pliki, które natworzył kompilator pozostawiając tylko moje i spróbowałem skompilować jeszcze raz, niestety tym razem kompilator wypisał, że brakuje jakiegoś pliku main.o . Wyjąłem więc ten plik z kosza i dodałem do folderu z projektem w rezultacie otrzymałem dokładnie taki sam program jak zanim wprowadziłem w nim zmiany. Bez tego pliku projekt się nie kompiluje, nawet nowy projekt, który stworzyłem się bez niego nie kompilował. Nigdzie w programie nie odwołuję się do tego pliku. Odwołanie jest tylko w jakimś pliku makefile.win , który tworzy kompilator. Ktoś wie o co chodzi?

0

Nie kompilator a build system/IDE. Wybierz w IDE opcję "rebuild" czy coś podobnego. A jeszcze lepiej nie używaj dev-c++.

0

Wszystko jedno, czy to kompilator,czy konsolidator. Nie działa. Kiedy próję kompilować sam plik main.cpp bez projektu, kompilator twierzdzi, że się odwołuję do niezdefiniowanych funkcji takich jak GetDC , które są przecież w załączonej przeze mnie bibliotece Windows.h

1

które są przecież w załączonej przeze mnie bibliotece Windows.h

Których deklaracje są w Windows.h, a nie szukane w tamtej chwili przez linkera[1] definicje.

Dev-C++ znane jest niestety z tego, że potrafi różne dziwne rzeczy potworzyć - IMO najlepiej będzie dla Ciebie przerzucić się na jakieś nowocześniejsze środowisko.

[1] napisałeś kompilator, ale przypuszczam, że miałeś tym razem na myśli linker (tak by wynikało z całości opisu)

0

Samo include nie wystarczy. Trzeba jeszcze dolinkować odpowiednią bibliotekę: User32.lib być może jeszcze coś innego.

0

OK, zainstalowałem code::blocks ponieważ część z was pisała, że winowajcą może być dev c++. Do code::blocksa podlinkowałem TEN SAM kompilator i konsolidator, którego używałem w devie (był nawet w folderze devcpp). Spróbowałem więc skompilować mój program i okazało się, że code::blocks nie chce żadnego pliku main.o wywala jednak błąd w linijce w, której tworzę nowy obiekt klasy zdefiniowanej w pliku .hpp czego nie robił devcpp. Przecież kompilator i linker są te same! Ktoś wie o co może chodzić? Napiszcie jeszcze jak w code::blocks otwiera się dziennik kompilacji bo na razie to nie mogę nawet przeczytać jaki warnig dostaję...

1

Wszystko jedno, czy to kompilator,czy konsolidator. Nie działa.

No właśnie nie wszystko jedno. Przez to, że nie wiesz co za co jest opdowiedzialne masz teraz problemy jak cytowane niżej.

okazało się, że code::blocks nie chce żadnego pliku main.o wywala jednak błąd w linijce w, której tworzę nowy obiekt klasy zdefiniowanej w pliku .hpp czego nie robił devcpp

DevCPP najpewniej miał inne ustawienia projektu, inne ścieżki do bibliotek, inne flagi linkera. Najpewniej nie pokrywają się one z tymi, które są ustawione w code::blocks dlatego masz inne problemy. Moja rada, wróć do devcpp i wypróbuj wcześniejsze rady @_0x666_ i @MarekR22.

ps. A jeżeli będziesz zmuszony w C++ naskrobać coś więcej niż ten jeden projekt, który teraz męczysz, najlepiej wywal devcpp i zainstaluj VS Express.

0

OK, częściowo rozwiązałem problem... code::blocks tworzy plik main.o i potem wywala błąd, a dev wszystko ładnie linkuje. Chciałbym jednak kompilować i konsolidować moje projekty jednym przyciskiem w jednym środowisku...

0

W code::blocks

||=== Build file: "no target" in "no project" (compiler: unknown) ===|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_GetObjectA'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_GetObjectA'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateCompatibleBitmap'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateCompatibleDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateSolidBrush'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_Rectangle'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_DeleteObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_DeleteDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_GetObjectA'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateCompatibleDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_BitBlt'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_DeleteDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateCompatibleBitmap'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateCompatibleDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_SelectObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_BitBlt'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_DeleteDC'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_CreateSolidBrush'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp|| undefined reference to `__imp_DeleteObject'|
C:\Users\Lenovo\Desktop\seng\GE 2.0\main.o:main.cpp:(.text$_ZN6Bitmap4FreeEv[_ZN6Bitmap4FreeEv]+0x27)||undefined reference to `__imp_DeleteObject'|
||error: ld returned 1 exit status|
||=== Build failed: 26 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

W devie:

C:\Users\Lenovo\Desktop\seng\GE 2.0\g++.exe	[Error] main.o: No such file or directory
0

OK, już nie ma problemu. Wystarczyło wywalić flagę -o3

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