C, C++ und Image Magick
Hallo, Ich bin Linuxneuling, und würde jetzt gerne mal unter Linux programmieren. Die Wahl viel auf C bzw. C++. 1) Ich habe auf meinem System zwei Compiler gefunden: gcc und g++ Welcher ist die erste Wahl für mich? Und was ist der Unterschied? 2) Ich habe die Bibliothek ImageMagick runtergeladen, und versuche ein Beispielprogramm zu kompilieren. Dabei kommt es zu Fehlermeldungen mit den Headerdateien. Nachdem ich jetzt schon ein paar Stunden im Internet gesucht habe, und keine Antwort fand: Wo genau kann ich den Compiler so konfigurieren, dass er in meinen Pfaden nachschaut? Bzw. muss ich alle Header in /usr/include/ ablegen? Gruss Karl
On Wed, 2003-12-03 at 02:48, Karl Sinn wrote:
Hallo,
Ich bin Linuxneuling, und würde jetzt gerne mal unter Linux programmieren. Die Wahl viel auf C bzw. C++.
1) Ich habe auf meinem System zwei Compiler gefunden: gcc und g++ Welcher ist die erste Wahl für mich? Und was ist der Unterschied? gcc ist der C-Compiler. g++ ist der C++-Compiler.
Je nachdem welch Sprache Du verwenden willst ist mal der eine mal der andere deine Wahl.
2) Ich habe die Bibliothek ImageMagick runtergeladen, und versuche ein Beispielprogramm zu kompilieren. Dabei kommt es zu Fehlermeldungen mit den Headerdateien. Nachdem ich jetzt schon ein paar Stunden im Internet gesucht habe, und keine Antwort fand: Wo genau kann ich den Compiler so konfigurieren, dass er in meinen Pfaden nachschaut? Du konfigurierst ihn gar nicht, Du gibst ihm Optionen mit, um ihm mitzuteilen wo er nachschauen muss.
gcc -I<pfad> bzw g++ -I<pfad> ist was Du suchst.
Bzw. muss ich alle Header in /usr/include/ ablegen? Nein. Besser *das* willst Du nicht wirklich.
Ralf
Am Mit 03.12.03 um 02:48 CET schrieb Karl Sinn
Hallo,
Ich bin Linuxneuling, und würde jetzt gerne mal unter Linux programmieren. Die Wahl viel auf C bzw. C++.
1) Ich habe auf meinem System zwei Compiler gefunden: gcc und g++ Welcher ist die erste Wahl für mich? Und was ist der Unterschied?
gcc für C, g++ für C++
2) Ich habe die Bibliothek ImageMagick runtergeladen, und versuche ein Beispielprogramm zu kompilieren. Dabei kommt es zu Fehlermeldungen mit den Headerdateien. Nachdem ich jetzt schon ein paar Stunden im Internet gesucht habe, und keine Antwort fand: Wo genau kann ich den Compiler so konfigurieren, dass er in meinen Pfaden nachschaut? Bzw. muss ich alle Header in /usr/include/ ablegen?
gcc -I/meine/includes -I/mehr/includes -L/meine/libraries mfg matthias -- Matthias Bernges mailto:matthiasbernges@gmx.de PGP Public Key: http://www.dogimo.de/~bernges/public-key
Hallo Karl, hallo Leute, Am Mittwoch, 03. Dezember 2003 02:48 schrieb Karl Sinn:
2) Ich habe die Bibliothek ImageMagick runtergeladen, und versuche ein Beispielprogramm zu kompilieren. Dabei kommt es zu Fehlermeldungen mit den Headerdateien.
Auch wenn das nicht Deine Frage war - was spricht dagegen, dass Du einfach das ImageMagick-Paket von den SuSE-CDs/DVD nimmst? Die Headerdateien stecken übrigens (wie bei den meisten Paketen) im zugehörigen -devel Paket ;-) Als Besonderheit gibt es noch das Paket ImageMagick-Magick++, das eine C++-API bereitstellt. Bei SuSE 9.0 wären also folgende Pakete zu installieren: ---> ./CD2/suse/i586/ImageMagick-5.5.7-57.i586.rpm ---> ./CD4/suse/i586/ImageMagick-Magick++-5.5.7-57.i586.rpm ---> ./CD4/suse/i586/ImageMagick-devel-5.5.7-57.i586.rpm (bei anderen SuSE-Versionen weichen die Versionsnummern ab, die Paketnamen sind vermutlich gleich.) Diese Informationen hab ich übrigens per pin -f ImageMagick ermittelt. Gruß Christian Boltz -- Direkter Mailkontakt mit dem Paketmacher. Tränen, Gewaltandrohnung, knappe Unterwäsche - als nix genützt. Abgelehnt. [Ratti ueber einen Aenderungswunsch an einem SuSE-Paket]
Hallo, Christian Boltz schrieb:
Die Headerdateien stecken übrigens (wie bei den meisten Paketen) im zugehörigen -devel Paket
Das werde ich gleich mal probieren.
Als Besonderheit gibt es noch das Paket ImageMagick-Magick++, das eine C++-API bereitstellt.
dito
Bei SuSE 9.0 wären also folgende Pakete zu installieren: ---> ./CD2/suse/i586/ImageMagick-5.5.7-57.i586.rpm ---> ./CD4/suse/i586/ImageMagick-Magick++-5.5.7-57.i586.rpm ---> ./CD4/suse/i586/ImageMagick-devel-5.5.7-57.i586.rpm (bei anderen SuSE-Versionen weichen die Versionsnummern ab, die Paketnamen sind vermutlich gleich.)
Tja, da ich "nur" SuSE 8.2 habe, bekomme ich nur ein rpm der Version 5.5.7 zu sehen. Ich werde es mal mit dem -devel versuchen. Danke Gruss Karl
Hallo, Bernhard Walle schrieb:
Mein g++ Aufruf: g++ -I /home/Karl/ImageMagick-5.5.7/include/ MagickDemo1.c
Du musst angeben, gegen welche Bibliothek gelinkt werden soll.
Beispiel:
g++ -I/usr/include/Magick++/ demo.cpp -o demo -lMagick++
Ich habs so probiert: g++ -I /home/Karl/ImageMagick-5.5.7/include/ MagickDemo1.c -l /home/Karl/ImageMagick-5.5.7/lib/libMagick++.so Ergebniss: /usr/lib/gcc-lib/i486-suse-linux/3.3/../../../../i486-suse-linux/bin/ld: ne peut trouver -l/home/Karl/ImageMagick-5.5.7/lib/libMagick++.so collect2: ld returned 1 exit status Was mache ich falsch? Da ist noch was. Wenn ich richtig verstanden habe ist libMagick die c-Version und Magick++ dei C++-Version. Ich kann aber nur libMagick++ finden. Gruss Karl
Karl Sinn
g++ -I /home/Karl/ImageMagick-5.5.7/include/ MagickDemo1.c -l /home/Karl/ImageMagick-5.5.7/lib/libMagick++.so
Ergebniss: /usr/lib/gcc-lib/i486-suse-linux/3.3/../../../../i486-suse-linux/bin/ld: ne peut trouver -l/home/Karl/ImageMagick-5.5.7/lib/libMagick++.so collect2: ld returned 1 exit status
Weil der Aufruf so aussehen muss (bei '\' Zeilen zu einer zusammenfügen): g++ -I /home/Karl/ImageMagick-5.5.7/include \ -L /home/Karl/ImageMagick-5.5.7/lib MagickDemo1.c -lMagick++ Mit -l wird *nur* der Name der Bibliothek ohne das "lib" vorweg und ohne Endung angegeben. Den Pfad zur Bibliothek muss man mit -L angeben. Philipp
Hallo, Philipp Thomas schrieb:
Weil der Aufruf so aussehen muss (bei '\' Zeilen zu einer zusammenfügen):
g++ -I /home/Karl/ImageMagick-5.5.7/include \ -L /home/Karl/ImageMagick-5.5.7/lib MagickDemo1.c -lMagick++
Mit -l wird *nur* der Name der Bibliothek ohne das "lib" vorweg und ohne Endung angegeben. Den Pfad zur Bibliothek muss man mit -L angeben.
Ich habs so probiert: g++ -I /home/Karl/ImageMagick-5.5.7/include -L \ /home/Karl/ImageMagick-5.5.7/lib MagickDemo1.c -lMagick++ Das war das Ergebniss: /usr/lib/gcc-lib/i486-suse-linux/3.3/../../../../i486-suse-linux/bin/ld: warning: libMagick.so.6, needed by /home/Karl/ImageMagick-5.5.7/lib/libMagick++.so, ...not found (try using -rpath or -rpath-link) Da kommt noch ein ganzer haufen solcher Meldungen. Die libMagick.so.6 liegt im gleichen Verzeichniss wie die libMagick.so Was tun? Gruss Karl
Moin moin, Am Thursday 04 December 2003 19:56 schrieb Karl Sinn: [...]
Ich habs so probiert:
g++ -I /home/Karl/ImageMagick-5.5.7/include/ MagickDemo1.c -l /home/Karl/ImageMagick-5.5.7/lib/libMagick++.so
Ergebniss: /usr/lib/gcc-lib/i486-suse-linux/3.3/../../../../i486-suse-linux/ bin/ld: ne peut trouver -l/home/Karl/ImageMagick-5.5.7/lib/libMagick++.so collect2: ld returned 1 exit status
Was mache ich falsch?
http://www.imagemagick.org/www/api.html --------------------- Auszug ------------------------- Now we need to compile. On Unix, the command would look something like this: setenv LD_LIBRARY_PATH /usr/local/lib gcc `Magick-config --cflags --cppflags` demo.c `Magick-config --ldflags --libs` Another example is smile.c. Compile and excute it to display a smiley face on your X server. For the Magick Wand API, use: cc `Wand-config --cxxflags --cppflags` demo.cpp `Wand-config --ldflags --libs` For C++, use: g++ `Magick++-config --cxxflags --cppflags` demo.cpp `Magick++-config --ldflags --libs` ---------------------------------------------------------ende Vielleicht hilft Dir das weiter ... Ich habe habe ImageMagick selbst kompiliert, nach dem IM fertig war habe ich LD_LIBRARY_PATH und PATH (für das Skript) angepasst. Dem Skript "Magick-config" musste ich noch etwas mehr an rechten geben...
Da ist noch was. Wenn ich richtig verstanden habe ist libMagick die c-Version und Magick++ dei C++-Version. Ich kann aber nur libMagick++ finden.
Hast Du die sourcen selber kompiliert? Wenn ja, ~/ImageMagick-5.5.7/magick/.libs/libMagick.so Ich habe die Libs auch nicht sofort gefunden. Ciao Andre
On Fri, 2003-12-05 at 16:00, Andre Heine wrote:
Hast Du die sourcen selber kompiliert?
Wenn ja, ~/ImageMagick-5.5.7/magick/.libs/libMagick.so
Ich habe die Libs auch nicht sofort gefunden. Urghhs - Du möchtest unbedingt libtool.info lesen ;)
.libs enthält interne Daten, die von libtool erzeugt werden. Gegen diese linkt man normalerweise nicht. Stattdessen installiert man eine Library und linkt dann gegen diese. Ralf
Moin moin, Am Friday 05 December 2003 17:56 schrieb Ralf Corsepius:
On Fri, 2003-12-05 at 16:00, Andre Heine wrote:
~/ImageMagick-5.5.7/magick/.libs/libMagick.so
Ich habe die Libs auch nicht sofort gefunden.
Urghhs - Du möchtest unbedingt libtool.info lesen ;)
.libs enthält interne Daten, die von libtool erzeugt werden. Gegen diese linkt man normalerweise nicht.
ACK! Aber bitte erwarte nicht von mir, das ich jede "Test Lib" im System installiere. Ich habe ImageMagick lediglich wegen diesen Thread kompiliert. Bei mit funktionieren die Beispiele von der ImageMagick Website. Zu 99,9% reicht ein einfaches "make" um z.B. eine Library zu testen:)
Stattdessen installiert man eine Library und linkt dann gegen diese.
Ist es nicht egal, wo die lib liegt? Hmm, ist die installierte "Library" nicht die, die in ".lib" liegt *wunder* Ciao Andre
On Fri, 2003-12-05 at 23:45, Andre Heine wrote:
Moin moin,
Am Friday 05 December 2003 17:56 schrieb Ralf Corsepius:
On Fri, 2003-12-05 at 16:00, Andre Heine wrote:
~/ImageMagick-5.5.7/magick/.libs/libMagick.so
Ich habe die Libs auch nicht sofort gefunden.
Urghhs - Du möchtest unbedingt libtool.info lesen ;)
.libs enthält interne Daten, die von libtool erzeugt werden. Gegen diese linkt man normalerweise nicht.
ACK!
Aber bitte erwarte nicht von mir, das ich jede "Test Lib" im System installiere. configure --prefix=/home/<user>/testing ... make install
gcc ... -L/home/<user>/testing/lib -lfoo -lbar ...
Ich habe ImageMagick lediglich wegen diesen Thread kompiliert.
Bei mit funktionieren die Beispiele von der ImageMagick Website.
Zu 99,9% reicht ein einfaches "make" um z.B. eine Library zu testen:) Lass es mich so ausdrücken, Du hast einem mutmaßlichen Anfänger auf die Frage "Wie lasse ich ein Auto an?", mit einer Erklärung wie er die Zündung kurzschließt geantwortet :-)
Stattdessen installiert man eine Library und linkt dann gegen diese.
Ist es nicht egal, wo die lib liegt? Jein.
Unter Linux meist ja, auf anderen OSen nicht.
Hmm, ist die installierte "Library" nicht die, die in ".lib" liegt *wunder* Unter Linux meist ja, auf anderen OSen nicht.
Ralf
Moin moin, Am Saturday 06 December 2003 00:54 schrieb Ralf Corsepius:
On Fri, 2003-12-05 at 23:45, Andre Heine wrote:
Am Friday 05 December 2003 17:56 schrieb Ralf Corsepius:
On Fri, 2003-12-05 at 16:00, Andre Heine wrote:
~/ImageMagick-5.5.7/magick/.libs/libMagick.so
Ich habe die Libs auch nicht sofort gefunden.
Urghhs - Du möchtest unbedingt libtool.info lesen ;) .libs enthält interne Daten, die von libtool erzeugt werden. Gegen diese linkt man normalerweise nicht.
ACK!
Aber bitte erwarte nicht von mir, das ich jede "Test Lib" im System installiere.
configure --prefix=/home/<user>/testing ... make install gcc ... -L/home/<user>/testing/lib -lfoo -lbar ...
Soweit habe ich auch wieder nicht gedacht ;( Warum installiere ich die Lib nicht einfach in mein Homedir??? Vermutlich zu einfach *gggg*
Ich habe ImageMagick lediglich wegen diesen Thread kompiliert.
Bei mit funktionieren die Beispiele von der ImageMagick Website.
Zu 99,9% reicht ein einfaches "make" um z.B. eine Library zu testen:)
Jo "Andre". Guck mal oben, wie man das macht!!
Lass es mich so ausdrücken, Du hast einem mutmaßlichen Anfänger auf die Frage "Wie lasse ich ein Auto an?", mit einer Erklärung wie er die Zündung kurzschließt geantwortet :-)
Hmm, so habe ich das noch nicht gesehen. Du hast da ja recht, im einfachsten und besten Fall macht man das genau so, wie das oben beschrieben hast. [...]
Hmm, ist die installierte "Library" nicht die, die in ".lib" liegt *wunder*
Unter Linux meist ja, auf anderen OSen nicht.
Meist ja .... Ups, dann habe ich sozusagen immer Glück gehabt :) Ciao Andre
participants (6)
-
Andre Heine
-
Christian Boltz
-
Karl Sinn
-
Matthias Bernges
-
Philipp Thomas
-
Ralf Corsepius