Seltsames Verhalten des gcc-Compilers
Hallo,
da ich bei dem Versuch, den ivtv-Treiber umzuwandeln seltsame
Compilermeldungen erhalten habe - siehe meine Sendungen vom 12. und 13.06 -
habe ich mir ein einfaches Testprogramm erstellt und versucht zu compilieren:
Dies ist das Programm:
#include
Am Mittwoch, 14. Juni 2006 16:56 schrieb Detlev Jäckel: ...
Dies ist das Programm:
#include
main(char *argv[], int argc) { printf("Hallo, SuSE\n"); }
int main(int argc, char **argv) { Also genau anders herum. Mein gcc 4.0.2 meckert auch, allerdings sieht es anders aus; d.h., das muß garnichts weiter heißen... Gruß -- - Alexandra Achtung: Lesen gefährdet die Dummheit! -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Alexandra Druecke wrote:
Am Mittwoch, 14. Juni 2006 16:56 schrieb Detlev Jäckel: ...
Dies ist das Programm:
#include
main(char *argv[], int argc) { printf("Hallo, SuSE\n"); }
int main(int argc, char **argv) {
Also genau anders herum. Mein gcc 4.0.2 meckert auch, allerdings sieht es anders aus; d.h., das muß garnichts weiter heißen...
Du hast recht, dass das Programm falsch ist, das hat allerdings nichts mit den genannten Fehlermeldungen zu tun. Das Programm muesste sich mit GCC 4.1 theoretisch compilieren lassen (was es hier auf meiner SuSE 10.0 auch tut), mit dem Flag -Wall wird es allerdings Warnungen hageln... Cheers, Th. -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Detlev Jäckel wrote:
da ich bei dem Versuch, den ivtv-Treiber umzuwandeln seltsame Compilermeldungen erhalten habe - siehe meine Sendungen vom 12. und 13.06 - habe ich mir ein einfaches Testprogramm erstellt und versucht zu compilieren:
Dies ist das Programm:
#include
main(char *argv[], int argc) { printf("Hallo, SuSE\n"); }
Ich hoffe mal ernsthaft, dass Du nicht professionell mit Software
Development zu tun hast. Das Programm hat 4 Zeilen, und darin sind mind.
3 Fehler enthalten, die zumindest zu Warnungen fuehren, im Falle der
Argumente von main() zu voellig undefiniertem Verhalten. Korrekt sollte
das Programm wie folgt aussehen:
#include
[...]
nathan:/home/detlev/Entwicklung-Test/test # gcc prog.c In file included from /usr/include/stdio.h:72, from prog.c:1: /usr/include/libio.h:481: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ /usr/include/libio.h:483: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ In file included from prog.c:1: /usr/include/stdio.h:349: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ /usr/include/stdio.h:354: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ /usr/include/stdio.h:357: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ /usr/include/stdio.h:368: error: expected declaration specifiers or ‘...’ before ‘__gnuc_va_list’ nathan:/home/detlev/Entwicklung-Test/test #
Du scheinst ein Problem mit glibc, glibc-devel und gcc auf Deinem System zu haben. Ein "rpm --verify" fuer die drei Pakete sowie die Ausgabe von "rpm -qi" fuer die drei Pakete mag evtl. Aufschluss geben. Hast Du evtl. x86 und x86_64 Pakete gemixt? Oder ist das ein Update einer frueheren Installation und keine Neuinstallation? Cheers, Th. -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Mittwoch, 14. Juni 2006 23:25 schrieb Thomas Hertweck:
Detlev Jäckel wrote:
da ich bei dem Versuch, den ivtv-Treiber umzuwandeln seltsame Compilermeldungen erhalten habe - siehe meine Sendungen vom 12. und 13.06 - habe ich mir ein einfaches Testprogramm erstellt und versucht zu compilieren:
Dies ist das Programm:
#include
main(char *argv[], int argc) { printf("Hallo, SuSE\n"); }
Ich hoffe mal ernsthaft, dass Du nicht professionell mit Software Development zu tun hast. Das Programm hat 4 Zeilen, und darin sind mind. 3 Fehler enthalten, die zumindest zu Warnungen fuehren, im Falle der Argumente von main() zu voellig undefiniertem Verhalten. Korrekt sollte das Programm wie folgt aussehen:
Ich bin tatsächlich kein ernsthafer C-Programmierer. Das Beispiel habe ich
unbesehen aus einer Seminarunterlage entnommen. Da stand das tatsächlich so
falsch drin.
Aber darum ging es ja auch nicht. Wenn ich ausschließlich die Zeile
#include
Du scheinst ein Problem mit glibc, glibc-devel und gcc auf Deinem System zu haben. Ein "rpm --verify" fuer die drei Pakete sowie die Ausgabe von "rpm -qi" fuer die drei Pakete mag evtl. Aufschluss geben. Hast Du evtl.
rpm --verify erzeugt kein Output, was ich als OK bewerte. Es folgen die Meldungen von rpm -qi: nathan:~ # rpm -qi glibc Name : glibc Relocations: (not relocatable) Version : 2.4 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany Release : 25 Build Date: Sun Apr 23 02:30:18 2006 Install Date: Thu Jun 1 17:31:50 2006 Build Host: meinhof.suse.de Group : System/Libraries Source RPM: glibc-2.4-25.src.rpm Size : 4944843 License: GPL, LGPL Signature : DSA/SHA1, Sun Apr 23 02:36:59 2006, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org URL : http://www.gnu.org/software/libc/libc.html Summary : Standard Shared Libraries (from the GNU C Library) Description : The GNU C Library provides the most important standard libraries used by nearly all programs: the standard C library, the standard math library, and the POSIX thread library. A system is not functional without these libraries. Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ # nathan:~ # rpm -qi glibc-devel Name : glibc-devel Relocations: (not relocatable) Version : 2.4 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany Release : 25 Build Date: Sun Apr 23 02:30:18 2006 Install Date: Thu Jun 1 17:43:00 2006 Build Host: meinhof.suse.de Group : Development/Libraries/C and C++ Source RPM: glibc-2.4-25.src.rpm Size : 14597963 License: GPL, LGPL Signature : DSA/SHA1, Sun Apr 23 02:37:00 2006, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org URL : http://www.gnu.org/software/libc/libc.html Summary : Include Files and Libraries Mandatory for Development Description : These libraries are needed to develop programs which use the standard C library. Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ # nathan:~ # rpm -qi gcc Name : gcc Relocations: (not relocatable) Version : 4.1.0 Vendor: SUSE LINUX Products GmbH, Nuernberg, Germany Release : 25 Build Date: Sat Apr 29 00:25:09 2006 Install Date: Tue Jun 13 18:30:58 2006 Build Host: gershwin.suse.de Group : Development/Languages/C and C++ Source RPM: gcc-4.1.0-25.src.rpm Size : 1153811 License: GPL Signature : DSA/SHA1, Sat Apr 29 00:33:51 2006, Key ID a84edae89c800aca Packager : http://bugs.opensuse.org URL : http://gcc.gnu.org/ Summary : The GNU C Compiler and Support Files Description : Core package for the GNU Compiler Collection, including the C language frontend. Language frontends other than C are split to different sub-packages, namely gcc-ada, gcc-c++, gcc-fortran, gcc-java and gcc-objc. Authors: -------- The GCC team. Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ #
x86 und x86_64 Pakete gemixt?
Nach der Ausgabe von "rpm -qi gcc" sieht das jedenfalls für mich nicht danach aus. Notfalls und zur Sicherheit muss ich die ganze Installation von DVD noch einmal machen. YaAST2 hat mir dieverse 32bit-Bibliotheken automatisch installiert und behauptet, sie auch zu benötigen.
Oder ist das ein Update einer frueheren Installation und keine Neuinstallation?
Definitiv nicht, sondern "just out of the Box" für 49.95€ zuz. Versandkosten. Gruß Detlev Jäckel -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Detlev Jäckel wrote:
[...] Ich bin tatsächlich kein ernsthafer C-Programmierer. Das Beispiel habe ich unbesehen aus einer Seminarunterlage entnommen. Da stand das tatsächlich so falsch drin.
Urgs. Schmeiss besser die Seminarunterlagen weg. Es gibt genuegend C-Literatur online zum Herunterladen, darunter auch ganze Buecher kostenlos. Da ist sicher etwas besseres dabei als die Seminarunterlagen.
[...] rpm --verify erzeugt kein Output, was ich als OK bewerte.
Das bedeutet, die Dateien auf Deinem System sind gegenueber den Dateien aus dem RPM unveraendert. Soweit so gut.
Es folgen die Meldungen von rpm -qi:
nathan:~ # rpm -qi glibc Name : glibc Relocations: (not relocatable) [...] Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ #
nathan:~ # rpm -qi glibc-devel Name : glibc-devel Relocations: (not relocatable) [...] Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ #
nathan:~ # rpm -qi gcc Name : gcc Relocations: (not relocatable) [...] Distribution: SUSE LINUX 10.1 (X86-64) nathan:~ #
Ich kann erst einmal nichts Auffaelliges entdecken. Die Pakete scheinen alle korrekte SUSE 10.1 64-bit Pakete zu sein. Da ich mein SUSE 10.1 Testsystem mittlerweile durch ein FC5 System ersetzt habe, kann ich da jetzt leider nicht weiter nachschauen und DIr wohl auch nicht weiter helfen. Eventuell wissen andere mehr. Schau auf alle Faelle mal bei Novell's Bugzilla vorbei, ob jemand aehnliche Probleme hatte... Cheers, Th. PS: Filesystem etc. hast Du mal ueberprueft? Hab da schon die seltsamsten Sachen erlebt... -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Am Donnerstag, 15. Juni 2006 22:04 schrieb Thomas Hertweck:
Ich kann erst einmal nichts Auffaelliges entdecken. Die Pakete scheinen alle korrekte SUSE 10.1 64-bit Pakete zu sein.
Da ich mein SUSE 10.1 Testsystem mittlerweile durch ein FC5 System ersetzt habe, kann ich da jetzt leider nicht weiter nachschauen und DIr wohl auch nicht weiter helfen. Eventuell wissen andere mehr. Schau auf alle Faelle mal bei Novell's Bugzilla vorbei, ob jemand aehnliche Probleme hatte...
Das Rätsel ist gelöst. Ich hatte übersehen, dass in /usr/local/include eine Headerdatei stdarg.h aus der dietlibc war. Ich weis nicht mehr wieso. Was ich auch nicht wusste, ist dass dieses Verzeichnis vor /usr/lib64/... durchsucht wird. Vielen Dank Detlev Jäckel -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Detlev Jäckel wrote:
[...] Ich hatte übersehen, dass in /usr/local/include eine Headerdatei stdarg.h aus der dietlibc war. Ich weis nicht mehr wieso. Was ich auch nicht wusste, ist dass dieses Verzeichnis vor /usr/lib64/... durchsucht wird.
/usr/include und /usr/local/include sind Standard-Verzeichnisse, in denen GCC nach Header-Dateien sucht. /usr/lib bzw. /usr/lib64 ist ein Verzeichnis, in dem sich Bibliotheken befinden - der Linker verwendet sie als Standard-Verzeichnisse. Das hatte mit Deinem Problem aber nichts zu tun, zum Linken bist Du ja gar nicht gekommen... Schau Dir die Ausgabe von $> echo "" | gcc -c -E -v - an, dort werden die Standard-Include-Verzeichnisse gelistet. Bei meinem GCC 4.0.2 auf der SuSE 10.0 liefert das z.B. [...] /usr/local/include /usr/lib/gcc/i586-suse-linux/4.0.2/include /usr/lib/gcc/i586-suse-linux/4.0.2/../../../../i586-suse-linux/include /usr/include [...] Wie Du siehst, wird /usr/local/include als erstes aufgefuehrt. Deswegen wurde bei Dir auch das Header-File aus /usr/local/include verwendet, nicht das aus /usr/include. Letztendlich fuehrte das zu Deinem Fehler. Cheers, Th. -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
participants (3)
-
Alexandra Druecke
-
Detlev Jäckel
-
Thomas Hertweck