statisch gegen vorhandene .so linken?

18/01/2008 - 18:19 von Schüle Daniel | Report spam
Hallo @all,

geht das?
Ich habe mesa installiert und habe in dem lib Verzeichnis
unter anderem auch libGL.so

ich kompiliere mit
gcc -o main main.c -Wall -I /pool/installed/open_dynamics_engine/include
-L /pool/installed/open_dynamics_engine/lib
-I /pool/installed/mesa/include -L /pool/installed/mesa/lib64 -lGL -lGLU
-lglut -lode

ein Blick mit nm offenbart
0000000000400910 t frame_dummy
U glutCreateWindow
U glutDisplayFunc
U glutInit
U glutInitDisplayMode
U glutInitWindowPosition
U glutInitWindowSize
U glutMainLoop
U glutPostRedisplay
U glutSwapBuffers
U glutTimerFunc
0000000000400973 T main

wie erwartet werden die U-Funktionen zur Laufzeit dazugelinkt.
Ich würde spasseshalber und testhalber auch statisch linken wollen.
Wenn ich an gcc Optionen -static setze, dann kommt die Fehlermeldung
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status

Versucht ld linker eine libGL.a zu finden? Oder findet er libGL.so nicht?

grüsse, Daniel
 

Lesen sie die antworten

#1 Juergen Ilse
19/01/2008 - 16:30 | Warnen spam
Hallo,

Schüle Daniel wrote:
geht das?



Nein.

Ich habe mesa installiert und habe in dem lib Verzeichnis
unter anderem auch libGL.so
ich kompiliere mit
gcc -o main main.c -Wall -I /pool/installed/open_dynamics_engine/include
-L /pool/installed/open_dynamics_engine/lib
-I /pool/installed/mesa/include -L /pool/installed/mesa/lib64 -lGL -lGLU
-lglut -lode

ein Blick mit nm offenbart
0000000000400910 t frame_dummy
U glutCreateWindow
U glutDisplayFunc
U glutInit
U glutInitDisplayMode
U glutInitWindowPosition
U glutInitWindowSize
U glutMainLoop
U glutPostRedisplay
U glutSwapBuffers
U glutTimerFunc
0000000000400973 T main

wie erwartet werden die U-Funktionen zur Laufzeit dazugelinkt.



Logisch.

Ich würde spasseshalber und testhalber auch statisch linken wollen.



Warum?

Wenn ich an gcc Optionen -static setze, dann kommt die Fehlermeldung
/usr/bin/ld: cannot find -lGL
collect2: ld returned 1 exit status

Versucht ld linker eine libGL.a zu finden? Oder findet er libGL.so nicht?



So ist es. Man kann nicht statisch gegen eine shared library linken.
Es geht einfach nicht. Um statisch zu linken, benoetigt man die statische
Version der library, und das waere in deinem Fall die ligGL.a.

Tschuess,
Juergen Ilse ()
Ein Domainname (auch wenn er Teil einer Mailadresse ist) ist nur ein Name,
nicht mehr und nicht weniger ...

Ähnliche fragen