MySQL4 auf RPI: Fehler beim compilieren

Gast #5180137
Lesenswert?

Hallo Leute,

Habe immer folgenden Fehler, wenn ich MySQL4 auf dem RPI kompilieren 
will:

mysqlbinlog.cc:538:1: error: narrowing conversion of 
‘18446744073709551615ull’ f 
rom ‘ulonglong {aka long long unsigned int}’ to ‘longlong {aka long long 
int}’ i 
nside { } [-Wnarrowing]
 };
 ^
mysqlbinlog.cc:538:1: error: narrowing conversion of 
‘18446744073709551615ull’ f 
rom ‘ulonglong {aka long long unsigned int}’ to ‘longlong {aka long long 
int}’ i 
nside { } [-Wnarrowing]
Makefile:593: recipe for target 'mysqlbinlog.o' failed
make[2]: *** [mysqlbinlog.o] Error 1
make[2]: Leaving directory '/home/CAOAdmin/mysql-4.1.22/client'
Makefile:459: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/CAOAdmin/mysql-4.1.22'
Makefile:386: recipe for target 'all' failed
make: *** [all] Error 2

Was hat das zu bedeuten?
#5180298
Lesenswert?

Horst schrieb:
> SQLLLEr schrieb:
>> MySQL4
>
> Hat es einen bestimmten Grund, dass du diese alte Version noch nutzen
> willst? MySQL ist inzwischen bei 5.7

Das Homeverzeichnis /home/CAOAdmin läßt vermuten, daß der Herr gerne das 
Warenwirtschaftssystem "CAO Faktura" benutzen möchte, das laut 
Hersteller wohl nur mit MySQL 4.irgendwas funktioniert -- warum auch 
immer.
Gast #5180871
Lesenswert?

SQLLLEr schrieb:
> Und wenn ich den Compiler downgrade?

Kannst du auch machen. Ich würde aber zuerst über die 
Compiler-Optionen/CFLAGS gehen (-Werror, -Wall, -pedantic etc raus, ggfs 
-fpermissive rein). Macht weniger Aufwand, und man muss nicht so tief 
ins System eingreifen.
(Nicht dass dann der Compiler plötzlich zu alt für die vorhandenen 
Libs+Headers ist)
Gast #5181451
Lesenswert?

Meine Installation sieht derzeit so aus:

./configure --prefix=/usr/local/mysql4 \
--with-unix-socket-path=/usr/local/mysql4/var/mysqld.sock \
--with-mysqld-user=mysql4 \
--with-server-suffix=mysql4 \
--with-tcp-port=3307

sudo make && make install

Was und wie muss ich ändern, damit die CFLAGS berücksichtigt werden?
Gast #5181479
Lesenswert?

Normalerweise kann man die CFLAGS beim configure mit angeben.
(Kann aber je nach Projekt wieder überschrieben/ignoriert werden. Ich 
werde das nicht für dich rauskniefeln, wie das im Uralt-Mysql ist. 
Eigeninitiative!)

also
./configure CFLAGS="-O2 -Wno-error -fpermissive ...usw" --prefix=...

Wenn es beim configure nicht greift, kannst du auch noch versuchen, es 
beim Make anzugeben, also

make CFLAGS="...."

Und: Da ist auch C++-Code mit im Spiel, oder? Also selbes Spiel mit 
"CXXFLAGS".


SQLLLEr schrieb:
> sudo make && make install

Genau verkehrt herum. "make", also das kompilieren, braucht keine 
Root-Rechte.
Nur das Installieren (Schreiben in Systemverzeichnisse) braucht sudo.

also:
./configure CFLAGS="…" CXXFLAGS="…" --prefix=………
make CFLAGS="…" CXXFLAGS="…" && sudo make install
Gast #5181499
Lesenswert?

Nein. Hat irgendwie auch nicht funktioniert.
Ich habe make und make install gestern mal getrennt ausgeführt.
Siehe da: make install macht den Fehler. make läuft ohne Fehler durch.

Anbei mal die Log Dateien vom vorherigen Versuch.
Angehängte Dateien:
Gast #5181552
Lesenswert?

SQLLLEr schrieb:

> Anbei mal die Log Dateien vom vorherigen Versuch.

Auch mal reingeschaut?
1
configure:2805: gcc -O2 -Wno-error -fpermissive,CXXFLAGS=-O2 -Wno-error -fpermissive     conftest.c  >&5
2
gcc: error: unrecognized command line option '-fpermissive,CXXFLAGS=-O2'

Was soll das Komma zwischen CFLAGS und CXXFLAGS?
Gast #5182248
Lesenswert?

NOP:
creating mysqlshow
if gcc -DUNDEF_THREADS_HACK -I. -I. -I.. -I../include -I../include 
-I../regex     -O2 -Wno-error -fpermissive -MT mysqldump.o -MD -MP -MF 
".deps/mysqldump.Tpo" -c -o mysqldump.o mysqldump.c; \
then mv -f ".deps/mysqldump.Tpo" ".deps/mysqldump.Po"; else rm -f 
".deps/mysqldump.Tpo"; exit 1; fi
cc1: warning: command line option ‘-fpermissive’ is valid for C++/ObjC++ 
but not for C
/bin/bash ../libtool --preserve-dup-deps --tag=CC --mode=link gcc  -O2 
-Wno-error -fpermissive  -rdynamic  -o mysqldump  mysqldump.o 
../libmysql/libmysqlclient.la -lcrypt -lnsl -lm   -lz
gcc -O2 -Wno-error -fpermissive -rdynamic -o .libs/mysqldump mysqldump.o 
../libmysql/.libs/libmysqlclient.so -lcrypt -lnsl -lm -lz -Wl,--rpath 
-Wl,/usr/local/mysql4/lib/mysql
creating mysqldump
if gcc -DUNDEF_THREADS_HACK -I. -I. -I.. -I../include -I../include 
-I../regex     -O2 -Wno-error -fpermissive -MT mysqlimport.o -MD -MP -MF 
".deps/mysqlimport.Tpo" -c -o mysqlimport.o mysqlimport.c; \
then mv -f ".deps/mysqlimport.Tpo" ".deps/mysqlimport.Po"; else rm -f 
".deps/mysqlimport.Tpo"; exit 1; fi
cc1: warning: command line option ‘-fpermissive’ is valid for C++/ObjC++ 
but not for C
/bin/bash ../libtool --preserve-dup-deps --tag=CC --mode=link gcc  -O2 
-Wno-error -fpermissive  -rdynamic  -o mysqlimport  mysqlimport.o 
../libmysql/libmysqlclient.la -lcrypt -lnsl -lm   -lz
gcc -O2 -Wno-error -fpermissive -rdynamic -o .libs/mysqlimport 
mysqlimport.o  ../libmysql/.libs/libmysqlclient.so -lcrypt -lnsl -lm -lz 
-Wl,--rpath -Wl,/usr/local/mysql4/lib/mysql
creating mysqlimport
if gcc -DUNDEF_THREADS_HACK -I. -I. -I.. -I../include -I../include 
-I../regex     -O2 -Wno-error -fpermissive -MT mysqltest.o -MD -MP -MF 
".deps/mysqltest.Tpo" -c -o mysqltest.o mysqltest.c; \
then mv -f ".deps/mysqltest.Tpo" ".deps/mysqltest.Po"; else rm -f 
".deps/mysqltest.Tpo"; exit 1; fi
cc1: warning: command line option ‘-fpermissive’ is valid for C++/ObjC++ 
but not for C
if gcc -DUNDEF_THREADS_HACK -I. -I. -I.. -I../include -I../include 
-I../regex     -O2 -Wno-error -fpermissive -MT my_getsystime.o -MD -MP 
-MF ".deps/my_getsystime.Tpo" -c -o my_getsystime.o `test -f 
'../mysys/my_getsystime.c' || echo './'`../mysys/my_getsystime.c; \
then mv -f ".deps/my_getsystime.Tpo" ".deps/my_getsystime.Po"; else rm 
-f ".deps/my_getsystime.Tpo"; exit 1; fi
cc1: warning: command line option ‘-fpermissive’ is valid for C++/ObjC++ 
but not for C
/bin/bash ../libtool --preserve-dup-deps --tag=CC --mode=link gcc  -O2 
-Wno-error -fpermissive  -rdynamic  -o mysqltest  mysqltest.o 
my_getsystime.o ../regex/libregex.a ../libmysql/libmysqlclient.la 
-lcrypt -lnsl -lm   -lz
gcc -O2 -Wno-error -fpermissive -rdynamic -o .libs/mysqltest mysqltest.o 
my_getsystime.o  ../regex/libregex.a ../libmysql/.libs/libmysqlclient.so 
-lcrypt -lnsl -lm -lz -Wl,--rpath -Wl,/usr/local/mysql4/lib/mysql
creating mysqltest
if g++ -DUNDEF_THREADS_HACK -I. -I. -I.. -I../include -I../include 
-I../regex     -O2 -Wno-error -fpermissive -MT mysqlbinlog.o -MD -MP -MF 
".deps/mysqlbinlog.Tpo" -c -o mysqlbinlog.o mysqlbinlog.cc; \
then mv -f ".deps/mysqlbinlog.Tpo" ".deps/mysqlbinlog.Po"; else rm -f 
".deps/mysqlbinlog.Tpo"; exit 1; fi
mysqlbinlog.cc:538:1: error: narrowing conversion of 
‘18446744073709551615ull’ from ‘ulonglong {aka long long unsigned int}’ 
to ‘longlong {aka long long int}’ inside { } [-Wnarrowing]
 };
 ^
mysqlbinlog.cc:538:1: error: narrowing conversion of 
‘18446744073709551615ull’ from ‘ulonglong {aka long long unsigned int}’ 
to ‘longlong {aka long long int}’ inside { } [-Wnarrowing]
Makefile:593: recipe for target 'mysqlbinlog.o' failed
make[2]: *** [mysqlbinlog.o] Error 1
make[2]: Leaving directory '/home/CAOAdmin/mysql-4.1.22/client'
Makefile:459: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/CAOAdmin/mysql-4.1.22'
Makefile:386: recipe for target 'all' failed
make: *** [all] Error 2

Aufruf war:
./configure CFLAGS="-O2 -Wno-error -fpermissive" CXXFLAGS="-O2 
-Wno-error -fpermissive" --prefix=/usr/local/mysql4 \
--with-unix-socket-path=/usr/local/mysql4/var/mysqld.sock \
--with-mysqld-user=mysql4 \
--with-server-suffix=mysql4 \
--with-tcp-port=3307

sudo make CFLAGS="-O2 -Wno-error -fpermissive" CXXFLAGS="-O2 -Wno-error 
-fpermissive" && make install
Gast #5182515
Lesenswert?

du hast nur Blind meine Beispiele kopiert, und nicht selber nach 
passenden Optionen gesucht?
-> Von mir gibt's nur "Hilfe zur Selbsthilfe", ich werde dir keine 
Lösung vorkauen.

Meinen Hinweis weiter oben wg. Root-Rechten/"sudo" beim Compilieren und 
Installieren hast du absichtlich ignoriert oder nicht verstanden?

Ideen:
-fpermissive bei CFLAGs raus
-Wno-narrowing wäre ein guter Kandidat (CXXFLAGS)

Oder den Compiler auf einen älteren Standard zurückschalten, z.B.
-std=gnu++98 (CXXFLAGS, Auf den 1998er Std)
-std=gnu99 (CFLAGS)
(Firma: RUB) #5185196
Lesenswert?

SQLLLEr schrieb:
> Ich zahle doch nicht für Freeware !
Freie Software (und das ist MySQL (GPL-Lizenz)) != Freeware
Das sind zwei verschiedene Paar Schuhe.

Und Open-Source Software hat mit Freeware genauso wenig zu tun.

Freie Software/Open-Source muss keines Wegs kostenfrei sein.
(free software - free as in 'free speech' not 'free beer')
Gast #5826294
Lesenswert?

Dinosaurier schrieb:
> du hast nur Blind meine Beispiele kopiert, und nicht selber nach
> passenden Optionen gesucht?
> -> Von mir gibt's nur "Hilfe zur Selbsthilfe", ich werde dir keine
> Lösung vorkauen.
>
> Meinen Hinweis weiter oben wg. Root-Rechten/"sudo" beim Compilieren und
> Installieren hast du absichtlich ignoriert oder nicht verstanden?
>
> Ideen:
> -fpermissive bei CFLAGs raus
> -Wno-narrowing wäre ein guter Kandidat (CXXFLAGS)
>
> Oder den Compiler auf einen älteren Standard zurückschalten, z.B.
> -std=gnu++98 (CXXFLAGS, Auf den 1998er Std)
> -std=gnu99 (CFLAGS)

Der Beitrag ist zwar schon alt, aber ich habe jetzt ganze 2 Tage mit dem 
Fehler verbracht. Der oben zitierte Kommentar brachte die Lösung!
Ich wollte die Version 5.0.27 kompilieren.

$ ./configure
$ make

-> Hier kam der Fehler "mysqld.cc:5997:1: error: narrowing conversion of 
‘18446744073709551615’ from ‘ulong {aka long unsigned int}’ to ‘longlong 
{aka long int}’ inside { } [-Wnarrowing]
 };"
-> Ich habe die g++ Zeile herausgesucht und separat mit der option 
"-std=gnu++98" nochmal kompiliert

$ g++ -std=gnu++98 -DMYSQL_SERVER -DDEFAULT_MYSQL_HOME="\"/usr/local\"" 
-DDATADIR="\"/usr/local/var\"" -DSHAREDIR="\"/usr/local/share/mysql\"" 
-DHAVE_CONFIG_H -I. -I. -I.. -I../innobase/include -I../include 
-I../include -I../regex -I.     -O3 -DDBUG_OFF 
-fno-implicit-templates -fno-exceptions -fno-rtti -MT mysqld.o -MD -MP 
-MF ".deps/mysqld.Tpo" -c -o mysqld.o mysqld.cc

-> Sobald man ich jetzt den make erneut ausgeführt habe, lief der 
Kompilierungsprozess an der letzten Stelle weiter

$ make


So hat es bei mir funktioniert! :)

Viele Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren