Forum: PC Hard- und Software MySQL4 auf RPI: Fehler beim compilieren


von SQLLLEr (Gast)


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?

von Horst (Gast)


Lesenswert?

SQLLLEr schrieb:
> MySQL4

Hat es einen bestimmten Grund, dass du diese alte Version noch nutzen 
willst? MySQL ist inzwischen bei 5.7

SQLLLEr schrieb:
> kompilieren

Außerdem:
Warum nicht: sudo apt-get install mysql-server (oder mariadb-server)

von Dinosaurier (Gast)


Lesenswert?

SQLLLEr schrieb:
> Was hat das zu bedeuten

Zu neuer compiler für zu alten Code.

Versuch an den CFLAGS zu drehen, -fpermissive z.B.

von Sheeva P. (sheevaplug)


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.

von Hmmm (Gast)


Lesenswert?

Sheeva P. schrieb:
> warum auch immer

Typischer Grund bei kommerziellen Produkten: Weil die letzte 
Client-Library genutzt wird, bevor von der LGPL auf die virale GPL 
umgestellt wurde.

von SQLLLEr (Gast)


Lesenswert?

Dinosaurier schrieb:
> SQLLLEr schrieb:
>> Was hat das zu bedeuten
>
> Zu neuer compiler für zu alten Code.
>
> Versuch an den CFLAGS zu drehen, -fpermissive z.B.

Und wenn ich den Compiler downgrade?
Unter Jessie lief es noch :-(

von Dinosaurier (Gast)


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)

von SQLLLEr (Gast)


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?

von Dinosaurier (Gast)


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

von SQLLLEr (Gast)


Angehängte Dateien:

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.

von Dinosaurier (Gast)


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?

von SQLLLEr (Gast)


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

von Dinosaurier (Gast)


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)

von Fred R. (Firma: www.ramser-elektro.at/shop) (fred_ram)


Lesenswert?

Wenn du eine fertige MySQL4 Installation brauchst, kannst du eine in 
meinem Shop beziehen.
Kann ich dir auch anpassen, wie du sie benötigst.

von SQLLLEr (Gast)


Lesenswert?

Ich zahle doch nicht für Freeware !

Wenn ich nur Make ausführe ohne Sudo, bricht bereits das Make ab.
Mit Sudo lauft es durch und funktioniert.
Danke :-)

von Kaj G. (Firma: RUB) (bloody)


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')

von Robert Hess (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.