PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler bei Compilieren von X11-Progs



nomad
30-12-2007, 09:37
Betr. Fehler bei Compilieren von X11-Progs

OS: SuseLinux 10.1. 64-Bit

hi leute

hab schon seit laengeren das problem, dass ich auf meinen System, kein Programm compilieren
kann, welches X11 benutzt also

g++ hello_world.cpp -o hello_world -L/usr/X11R6/lib -lm -lpthread -lX11

FehlerMeldung:
== /usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status

habe mir schon folgendes Xlib-Tutorial runtergeladen.
<http://users.actcom.co.il/~choo/lupg...ogramming.html>

unter compiling: steht dasselbe, wie ich's oben schon verwendet habe.

hab keine ahnung an was es liegt:
-> 64Bit-Version, oder steh ich auf meiner leitung

ich kann problemlos opengl, sdl, gtk compilieren.

hier ist das c++-programm dass ich compilieren wollte.
CImg-1.2.5 hab ich im netz gefunden.
konnte es unter xp und visual c++ version 6.0 compilieren.
die version die ich unter linux verwende ist auch fuer linux gedacht.

<<

#include "CImg.h"

using namespace cimg_library;

int main()
{
CImg<unsigned char> img(640,400,1,3);
img.fill(0);
unsigned char purple[] = {255,0,255};
img.draw_text("Hello World",100,100,purple);
img.display("My first CImg code");

return 0;
}

>>

waere sehr froh, wenn jemand mir auf die spruenge helfen koennte.

gruss
nomad

jeebee
30-12-2007, 10:10
hast du die x11-dev(el) Pakete installiert (weiss nicht genau wie sie bei SuSE heissen)?

nomad
30-12-2007, 16:22
hi jeebee
vielen dank fuer die info.
werd mal gucken
>> folgendes ist an bord

- xorg-X11
- xorg-X11-devel
- xorg-X11-devel-32 bit (den hab ich noch installiert)

version: 6.9.0.48 (64 bit)

sollte das nun gehen ?
oder gibt's da was zu beachten?

waere um tips und hinweise dankbar.
meld mich morgen wieder
gruss
nomad

nomad
31-12-2007, 10:39
hi,
das waer das ergebnis:

g++ hello_world.cpp -o hello_world -L/usr/X11R6/lib -lm -lpthread -lX11
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/X11R6/lib/libX11.so when searching for -lX11
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /usr/X11R6/lib/libX11.a when searching for -lX11
/usr/lib64/gcc/x86_64-suse-linux/4.1.0/../../../../x86_64-suse-linux/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status

jetzt bin ich echt ratlos.
liegt es daran das ich ein 64-bit linux benutz
oder was
hat jemand ein tip wie ich das prog zum laufen kriege.

schoenes neues jahr
gruss
nomad

anda_skoa
31-12-2007, 15:33
Vielleicht findet der Linker die 32-Bit Version vor der 64-Bit Version.

Mach mal ein "file" auf die .so Datei

Eventuell musst du das 32-Btit Devel Paket entfernen.

Ciao,
_

nomad
31-12-2007, 20:58
hi
danke fuer die antwort.
entschuldige wenn ich frage:
Was verstehst du unter:

>> Mach mal ein "file" auf die .so Datei ????

2) wenn ich das 32 bit devel packet entferne, bin ich wieder so weit wie
am anfang.

koennte es sein dass ich ev. das 64-bit devel packet temporaer entfernem
muesste, da du ja sagst
der linker erwischt die 64-bit version vor der 32-bit wersion?7

wenn ja, was haette das z.b. auf opengl und sdl-versionen fuer einen
einfluss??
so viel ich weiss, benutzen die beide ja keine x11-libs??

um hinweise waer ich froh

eine schoene sylvester-nacht
gruss
nomad

anda_skoa
02-01-2008, 15:25
hi
danke fuer die antwort.
entschuldige wenn ich frage:
Was verstehst du unter:

>> Mach mal ein "file" auf die .so Datei ????


Das gibt es ein Commandline-Tool names "file", welches den Dateityp einer Datei ermitteln kann.
Im Falle einer Bibliothek enthält das Informationen zu 32-Bit/64-Bit



2) wenn ich das 32 bit devel packet entferne, bin ich wieder so weit wie
am anfang.

Sieht dir mal alle mit libX11 beginnenden Dateien in Verzeichnis an, wahrscheinlich ist libX11.so nur ein symbolischer Link auf die eigentliche Datei und du kannst den Link manuell auf die 64 Bit Version umsetzen.



koennte es sein dass ich ev. das 64-bit devel packet temporaer entfernem
muesste, da du ja sagst
der linker erwischt die 64-bit version vor der 32-bit wersion?7

So wie es im Moment aussieht, findet er eben die 32-Bit Version zuerst, was deinen 64-Bit Linker nicht bekommt.
Insofern würde das Entfernen der 64-Bit X11 Pakete nicht viel bringen, außer dass du schon per Definition weißt, dass es nicht klappen kann.

Ciao,
_

undefined
02-01-2008, 16:31
Ja ja das leidige CaseSensitive Problem :D
PS: Warum nicht?


g++ hello_world.cpp -o hello_world $(pkg-config --libs x11)

nomad
03-01-2008, 09:03
hi
vielen dank fuer die antworten:
also:
>> g++ hello_world.cpp -o hello_world $(pkg-config --libs x11)

bringt folgendes zu tage:
" Package x11 was not found in the pkg-config search path.
perhaps you should add the directory containing `x11.pc`
to the PKG_CONFIG_PATH enviroment variable.
no package x11 found
"
ich glaub langsam, das diese unstimmigkeiten an meinen 64-bit system liegen.
ss -> mein thread betr. sdlcam
64-bit linker kommt vermutlich nicht mit 32-bit zu recht.

oder komm ich doch noch zu meinem hello_world prog.?

gruss
nomad

undefined
03-01-2008, 14:02
Stellt sich wirklich mal wieder die frage in welches Paket SuSE die x11 libs proto|devel gepackt hat? Ohne die pkg-config files wird dir hundert pro etwas fehlen, da hilft nur suchen.
Was den gcc betrifft kannst du den 32bit oder 64bit schalter setzen, siehe man gcc.

g++ -m32 hello_world.cpp -o hello_world $(pkg-config --libs x11)

nomad
05-01-2008, 08:16
hi,
entschuldigt die verspaetung.
also mit obiger compile:
package X11 not found....
auch wird ein file gnu/stubs-32.h nicht gefunden.
also jetzt geb ichs auf.
man kann ja nicht alles haben.
gruss nomad

rais
06-01-2008, 17:20
also jetzt geb ichs auf.

das kenn ich nicht, was ist das? :D
Ich hab bei mir mal nachgeschaut (auch OpenSuse 10.1 64 Bit):


ls -l /usr/X11R6/lib/libX11.so
lrwxrwxrwx 1 root root 13 2007-05-04 01:18 /usr/X11R6/lib/libX11.so -> libX11.so.6.2

file /usr/X11R6/lib/libX11.so.6.2
/usr/X11R6/lib/libX11.so.6.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), stripped
aber es gibt neben lib ja auch noch lib64;-)


ls -l /usr/X11R6/lib64/libX11.so
lrwxrwxrwx 1 root root 13 2007-05-04 01:12 /usr/X11R6/lib64/libX11.so -> libX11.so.6.2

file /usr/X11R6/lib64/libX11.so.6.2
/usr/X11R6/lib64/libX11.so.6.2: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), stripped
also brauchst Du wohl nur den -L entsprechend mit /usr/X11R6/lib64 zu belegen.;)
MfG,

nomad
07-01-2008, 09:22
HI RAIS
Du hast recht....
nicht aufgeben.
also mit g++ hello_world.cpp -o hello_world -O2 -L/usr/X11R6/lib64 -lm -lX11
ES FUNZZT.
VIELEN DANK, jetzt hab ich endlich eine zusaetzlich gute grafik-bibliothek mit
CImg-1.2.5.
ich war voellig verdutzt, es hat einwenig gedauert....
fuer was hello-world progs alles gut sind.
Vielen dank an dich und allen die mir geholfen haben.
gruss
nomad