Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

mam problem z linkowaniem freeglut w code::block

Ostatnio zmodyfikowano 2026-07-20 22:09
Autor Wiadomość
AP1994
Temat założony przez niniejszego użytkownika
mam problem z linkowaniem freeglut w code::block
» 2026-07-19 19:08:24
ma problem jak w temacie kiedy liknuje freeglut dostaje błędy

||=== Build: Release in Gra (compiler: GNU GCC Compiler) ===|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp|| undefined reference to `__imp_glutPostRedisplay'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp|| undefined reference to `__imp_glutPostRedisplay'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text$_ZN8Dropdown6renderEv[_ZN8Dropdown6renderEv]+0x161)||undefined reference to `__imp_glutBitmapCharacter'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text$_ZN8Dropdown6renderEv[_ZN8Dropdown6renderEv]+0x19f)||undefined reference to `__imp_glutBitmapCharacter'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x22)||undefined reference to `__imp___glutInitWithExit'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x34)||undefined reference to `__imp_glutInitWindowSize'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x3f)||undefined reference to `__imp_glutInitDisplayMode'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x53)||undefined reference to `__imp___glutCreateWindowWithExit'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x65)||undefined reference to `__imp_glutDisplayFunc'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x72)||undefined reference to `__imp_glutMouseFunc'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-19\Release\obj\main.o:main.cpp:(.text.startup+0x78)||undefined reference to `__imp_glutMainLoop'|
||error: ld returned 1 exit status|
||=== Build failed: 12 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
P-184294
tBane
» 2026-07-19 19:51:50
Chat-GPT


To jest błąd linkera, nie kodu. Nagłówki freeglut zostały znalezione, ale linker nie dostał właściwej biblioteki.
Prefiks __imp_ oznacza, że program oczekuje wersji DLL, czyli biblioteki importowej libfreeglut.a.

W Code::Blocks wejdź w:
Project → Build options → Linker settings


Dodaj biblioteki w tej kolejności:
freeglut
opengl32
glu32
winmm
gdi32

Możesz też wpisać w Other linker options:
-lfreeglut -lopengl32 -lglu32 -lwinmm -lgdi32


Następnie w:
Search directories → Linker

dodaj katalog, w którym znajduje się:
libfreeglut.a


Na przykład:
C:\freeglut\lib\x64


 Ważne
Masz kompilator 64-bitowy:
x86_64-w64-mingw32

więc freeglut też musi być w wersji 64-bitowej dla MinGW. Biblioteka freeglut.lib przeznaczona dla Visual Studio nie będzie odpowiednia. Pakiet powinien zawierać przynajmniej:
include\GL\freeglut.h
lib\libfreeglut.a
bin\freeglut.dll

Plik:
freeglut.dll

skopiuj później obok wygenerowanego pliku .exe.

Nie mieszaj wersji statycznej i dynamicznej


Jeżeli obecnie linkujesz:
libfreeglut_static.a


to dokładnie to może powodować pokazane błędy. Twój kod oczekuje dynamicznego __imp_glut..., a biblioteka statyczna udostępnia inne symbole.

Masz wtedy dwie możliwości.

Dynamiczna — najprostsza

libfreeglut.a
freeglut.dll obok exe

Bez definiowania
FREEGLUT_STATIC
.

Statyczna

Przed includem:
C/C++
#define FREEGLUT_STATIC
#include <GL/freeglut.h>

i linkowanie:
-lfreeglut_static -lopengl32 -lglu32 -lwinmm -lgdi32


Po zmianie ustawień wykonaj:
Build → Clean
Build → Rebuild

Najbardziej prawdopodobne jest, że dodałeś libfreeglut_static.a, ale nie zdefiniowałeś FREEGLUT_STATIC, albo dodałeś bibliotekę 32-bitową/MSVC zamiast 64-bitowego libfreeglut.a dla MinGW.
P-184297
AP1994
Temat założony przez niniejszego użytkownika
» 2026-07-19 21:15:13
gdzie pobrać inny freeglut bo mam jakąś wersje gdzie są tylko pliki libglut.la libglut.a libglut.dll.a
i dostaje błąd

ld.exe||cannot find -lfreeglut: No such file or directory|
P-184298
tBane
» 2026-07-19 22:37:11
P-184299
AP1994
Temat założony przez niniejszego użytkownika
» 2026-07-19 23:37:00
nadal dostaje błąd

ld.exe||cannot find -lfreeglut: No such file or directory|
mimo że wżuciłem pliki lib i bin do folderów mingw
P-184300
tBane
» 2026-07-19 23:44:29
W
Project → Build options → Search directories → Linker
 dodaj dokładny folder, w którym znajduje się:
libfreeglut.dll.a

Przykładowo:
C:\freeglut\lib\x64

Następnie w
Linker settings → Link libraries
 zostaw:
freeglut
opengl32
Nie wpisuj tam:
libfreeglut.dll.a

Plik:
libfreeglut.dll
umieść obok skompilowanego pliku .exe, na przykład:
bin\Release\libfreeglut.dll
P-184301
AP1994
Temat założony przez niniejszego użytkownika
» 2026-07-20 17:55:41
nawet jak podałem dokładną ścieżkę to i tak dostałem błąd

||=== Build: Release in Gra (compiler: GNU GCC Compiler) ===|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp|| undefined reference to `glutPostRedisplay'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp|| undefined reference to `glutPostRedisplay'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text$_ZN8Dropdown6renderEv[_ZN8Dropdown6renderEv]+0x16d)||undefined reference to `glutBitmapCharacter'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text$_ZN8Dropdown6renderEv[_ZN8Dropdown6renderEv]+0x29f)||undefined reference to `glutBitmapCharacter'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x21)||undefined reference to `__glutInitWithExit'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x32)||undefined reference to `glutInitWindowSize'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x3c)||undefined reference to `glutInitDisplayMode'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x4f)||undefined reference to `__glutCreateWindowWithExit'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x60)||undefined reference to `glutDisplayFunc'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x6c)||undefined reference to `glutMouseFunc'|
C:\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\15.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: 2026-07-20\Release\obj\main.o:main.cpp:(.text.startup+0x71)||undefined reference to `glutMainLoop'|
||error: ld returned 1 exit status|
||=== Build failed: 12 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
P-184303
tBane
» 2026-07-20 19:41:33
Teraz widać przyczynę: kompilujesz kod jak dla biblioteki statycznej, ale próbujesz linkować wersję DLL.
W poprzednim błędzie symbole miały prefiks:
__imp_glutPostRedisplay

a teraz masz:
glutPostRedisplay


To zwykle oznacza, że gdzieś zostało zdefiniowane:
FREEGLUT_STATIC


Nagłówki freeglut wyłączają wtedy importowanie funkcji z DLL. Dla wersji dynamicznej FREEGLUT_STATIC nie może być zdefiniowane.
Ustawienie dla DLL
W Code::Blocks wejdź w:
Project → Build options


Zaznacz po lewej:
Gra
oraz osobno:
Release

Następnie:
Compiler settings → #defines

Usuń:
FREEGLUT_STATIC

W:
Linker settings → Link libraries

dodaj:
freeglut
opengl32
glu32

W:
Search directories → Linker

powinien być folder 64-bitowy, przykładowo:
C:\mingw64\x86_64-w64-mingw32\lib


W tym folderze musi znajdować się:
libfreeglut.dll.a
Nie libfreeglut_static.a.

Następnie koniecznie wykonaj:
Build → Clean
Build → Rebuild

To ważne, ponieważ obecny main.o został już skompilowany ze złymi ustawieniami.

Obok końcowego pliku .exe umieść:
libfreeglut.dll


Poprawne ustawienie dynamiczne wygląda tak:
kompilacja: bez FREEGLUT_STATIC
linkowanie: -lfreeglut -lopengl32 -lglu32
plik obok exe: libfreeglut.dll

Wersja statyczna byłaby odwrotna:
FREEGLUT_STATIC
-lfreeglut_static
-lopengl32
-lglu32
-lwinmm
-lgdi32

ale skoro chcesz używać DLL, usuń FREEGLUT_STATIC. Oficjalne instrukcje paczki MinGW rozdzielają te dwa tryby dokładnie w ten sposób
P-184304
« 1 » 2
  Strona 1 z 2 Następna strona