Problem vid kompilering av enkelt OpenGL-program
Problemet är löst. Se nedan.
Jag försöker kompilera en enkel OpenGL-testfil, men misslyckas hela tiden med länkningen.
Min fil ser ut så här:
#include <GL/glut.h>
int main(int argc, char **argv){
glutInit(&argc, argv);
return 0;
}
Dessa kommandon har jag använt för att försöka kompilera:
"gcc -ansi -Wall test.c"
/tmp/ccgYmUr1.o(.text+0x2a): In function `main':
: undefined reference to `glutInit'
collect2: ld returned 1 exit status
"gcc -ansi -lglut -Wall test.c"
/usr/bin/ld: cannot find -lglut
collect2: ld returned 1 exit status
"gcc -L /usr/X11R6/lib -lglut -ansi -Wall test.c"
Massor av "undefined reference"
"gcc -L /usr/X11R6/lib -lGL -lGLU -lglut -Wall -ansi test.c"
/usr/X11R6/lib/libglut.so: undefined reference to `XGetExtensionVersion'
/usr/X11R6/lib/libglut.so: undefined reference to `XFreeDeviceList'
/usr/X11R6/lib/libglut.so: undefined reference to `XQueryDeviceState'
/usr/X11R6/lib/libglut.so: undefined reference to `XListInputDevices'
/usr/X11R6/lib/libglut.so: undefined reference to `XFreeDeviceState'
/usr/X11R6/lib/libglut.so: undefined reference to `XOpenDevice'
/usr/X11R6/lib/libglut.so: undefined reference to `XmuLookupStandardColormap'
/usr/X11R6/lib/libglut.so: undefined reference to `XSelectExtensionEvent'
collect2: ld returned 1 exit status
Jag kör Arch Linux och har installerat glut 3.7-4. Som jag har förstått det kallas detta statisk länkning, och problemet är att ytterligare ett bibliotek skall inkluderas. Borde länkaren inte själv kunna hitta det den behöver?
Varför blir det så här? Är det en bättre idé att länka dynamiskt och hur gör man i så fall det?
Lösningen:
Jag letade upp alla saknade symboler med detta program:
nm -Bog /usr/X11/lib/* | grep SaknadSymbol
Sedan inkluderade jag dem i kommandot och fick slutligen detta:
gcc -L /usr/X11R6/lib -lGL -lGLU -lglut -lXi -lXmu -Wall -ansi test.c
Frågan om huruvida detta är statisk eller dynamisk länkning återstår, och det skulle vara trevligt med ett smidigare sätt att göra detta. Finns ingen miljövariabel man kan använda för den långa sökvägen?