Forum: Mikrocontroller und Digitale Elektronik Eclipse Cross Compiler - Raspberry Pi - MySQL


von auron2008 (Gast)


Lesenswert?

Hi,

ich möchte aus einem C Programm auf eine MySQL Datenbank zugreifen. Das 
Programm soll dabei auf dem Raspberry Pi 2 laufen und es soll mittels 
einem Cros Compiler übersetzt werden. Mein System ist dein Debian mit 
der IDE Eclipse.

Folgendes hab ich schon versucht.

1. Zuerst habe ich auf dem Rasp ein C Programm erstellt mit folgendem 
Inhalt.
1
#include <stdio.h>
2
#include <string.h>
3
#include <stdlib.h>
4
5
#include <mysql.h>
6
7
int main(int argc, char **argv)
8
{
9
  MYSQL *mysql1;
10
  mysql1 = mysql_init(NULL);
11
}

Das hab ich  mit : gcc main.c `mysql_config --cflags` `mysql_config 
--libs` übersetzt um die Dateien libmysqlclient.a, libmysqlclient.so zu 
erhalten. Diese hab ich auf meinen großen Rechner ins Verzeichnis 
/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/lib/gcc/arm-lin 
ux-gnueabihf/4.8.3/  meiner Toolchain kopiert.

Unter Eclipse habe ich bei den Cross Settings folgendes eingetragen.

Prefix : arm-linux-gnueabihf-
Path : /arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

Cross GCC Compiler->includes : /usr/include/mysql

Linker->Libaries->Path : 
/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/lib/gcc/arm-lin 
ux-gnueabihf/4.8.3

Linker->Miscellaneous->Other options : `mysql_config –cflags` , 
`mysql_config –libs`

Mein C Programm was ich übersetzen möchte:
1
#include <stdio.h>
2
#include <mysql.h>
3
#include <my_global.h>
4
5
int main()
6
{
7
  printf("MySQL client version: %s\n", mysql_get_client_info());
8
9
  return 0;
10
}

Die Fehlermeldung die ich bekomme
1
arm-linux-gnueabihf-gcc `mysql_config –cflags` `mysql_config –libs` -L/home/david/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/lib/gcc/arm-linux-gnueabihf/4.8.3 -o "cmysql"  ./main.o   
2
arm-linux-gnueabihf-gcc: error: Usage:: Datei oder Verzeichnis nicht gefunden
3
arm-linux-gnueabihf-gcc: error: [OPTIONS]: Datei oder Verzeichnis nicht gefunden
4
arm-linux-gnueabihf-gcc: error: Options:: Datei oder Verzeichnis nicht gefunden
5
arm-linux-gnueabihf-gcc: error: [-I/usr/include/mysql: Datei oder Verzeichnis nicht gefunden
6
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
7
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
8
arm-linux-gnueabihf-gcc: error: [/usr/lib/mysql/plugin]: Datei oder Verzeichnis nicht gefunden
9
arm-linux-gnueabihf-gcc: error: [/var/run/mysqld/mysqld.sock]: Datei oder Verzeichnis nicht gefunden
10
arm-linux-gnueabihf-gcc: error: [0]: Datei oder Verzeichnis nicht gefunden
11
arm-linux-gnueabihf-gcc: error: [5.5.44]: Datei oder Verzeichnis nicht gefunden
12
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
13
arm-linux-gnueabihf-gcc: error: VAR: Datei oder Verzeichnis nicht gefunden
14
arm-linux-gnueabihf-gcc: error: is: Datei oder Verzeichnis nicht gefunden
15
arm-linux-gnueabihf-gcc: error: one: Datei oder Verzeichnis nicht gefunden
16
arm-linux-gnueabihf-gcc: error: of:: Datei oder Verzeichnis nicht gefunden
17
arm-linux-gnueabihf-gcc: error: pkgincludedir: Datei oder Verzeichnis nicht gefunden
18
arm-linux-gnueabihf-gcc: error: [/usr/include/mysql]: Datei oder Verzeichnis nicht gefunden
19
arm-linux-gnueabihf-gcc: error: pkglibdir: Datei oder Verzeichnis nicht gefunden
20
arm-linux-gnueabihf-gcc: error: [/usr/lib/x86_64-linux-gnu]: Datei oder Verzeichnis nicht gefunden
21
arm-linux-gnueabihf-gcc: error: plugindir: Datei oder Verzeichnis nicht gefunden
22
arm-linux-gnueabihf-gcc: error: [/usr/lib/mysql/plugin]: Datei oder Verzeichnis nicht gefunden
23
arm-linux-gnueabihf-gcc: error: Usage:: Datei oder Verzeichnis nicht gefunden
24
arm-linux-gnueabihf-gcc: error: [OPTIONS]: Datei oder Verzeichnis nicht gefunden
25
arm-linux-gnueabihf-gcc: error: Options:: Datei oder Verzeichnis nicht gefunden
26
arm-linux-gnueabihf-gcc: error: [-I/usr/include/mysql: Datei oder Verzeichnis nicht gefunden
27
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
28
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
29
arm-linux-gnueabihf-gcc: error: [/usr/lib/mysql/plugin]: Datei oder Verzeichnis nicht gefunden
30
arm-linux-gnueabihf-gcc: error: [/var/run/mysqld/mysqld.sock]: Datei oder Verzeichnis nicht gefunden
31
arm-linux-gnueabihf-gcc: error: [0]: Datei oder Verzeichnis nicht gefunden
32
arm-linux-gnueabihf-gcc: error: [5.5.44]: Datei oder Verzeichnis nicht gefunden
33
arm-linux-gnueabihf-gcc: error: [-L/usr/lib/x86_64-linux-gnu: Datei oder Verzeichnis nicht gefunden
34
arm-linux-gnueabihf-gcc: error: VAR: Datei oder Verzeichnis nicht gefunden
35
arm-linux-gnueabihf-gcc: error: is: Datei oder Verzeichnis nicht gefunden
36
arm-linux-gnueabihf-gcc: error: one: Datei oder Verzeichnis nicht gefunden
37
arm-linux-gnueabihf-gcc: error: of:: Datei oder Verzeichnis nicht gefunden
38
arm-linux-gnueabihf-gcc: error: pkgincludedir: Datei oder Verzeichnis nicht gefunden
39
arm-linux-gnueabihf-gcc: error: [/usr/include/mysql]: Datei oder Verzeichnis nicht gefunden
40
arm-linux-gnueabihf-gcc: error: pkglibdir: Datei oder Verzeichnis nicht gefunden
41
arm-linux-gnueabihf-gcc: error: [/usr/lib/x86_64-linux-gnu]: Datei oder Verzeichnis nicht gefunden
42
arm-linux-gnueabihf-gcc: error: plugindir: Datei oder Verzeichnis nicht gefunden
43
arm-linux-gnueabihf-gcc: error: [/usr/lib/mysql/plugin]: Datei oder Verzeichnis nicht gefunden
44
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--cflags’
45
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libs’
46
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libs_r’
47
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--plugindir’
48
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--socket’
49
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--port’
50
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libmysqld-libs’
51
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--variable=VAR’
52
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--cflags’
53
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libs’
54
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libs_r’
55
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--plugindir’
56
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--socket’
57
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--port’
58
arm-linux-gnueabihf-gcc (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) 4.8.3 20140303 (prerelease)
59
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--libmysqld-libs’
60
Copyright (C) 2013 Free Software Foundation, Inc.
61
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘--variable=VAR’
62
This is free software; see the source for copying conditions.  There is NO
63
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Kann mir dabei jemand helfen oder mir einen Tipp geben wie ich mittels 
Eclipse und dem Cross Compiler auf eine MySQL Datenbank zugreifen kann ?

auron

von Klaus W. (mfgkw)


Lesenswert?

Wahrscheinlich funktioniert dieser Aufruf bei dir nicht:
mysql_config –libs

Lass den doch mal alleine laufen, und du wirst Fehlermeldungen bekommen, 
in denen Usage, OPTIONS etc. vorkommt...

Erst wenn das funktioniert, kannst du deinen ganzen Compileraufurf 
versuchen.

von auron2008 (Gast)


Lesenswert?

Merk gerad das ich im flaschen Unterforum bin, vielei kann ein Admin 
verschieben (-:.

Ich hoffe ich versteh das richtig, hab im terminal den Befehl aufgerufen 
und erhalte
1
Usage: /usr/bin/mysql_config [OPTIONS]
2
Options:
3
        --cflags         [-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing    -g -DNDEBUG]
4
        --include        [-I/usr/include/mysql]
5
        --libs           [-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -ldl]
6
        --libs_r         [-L/usr/lib/x86_64-linux-gnu -lmysqlclient_r -lpthread -lz -lm -ldl]
7
        --plugindir      [/usr/lib/mysql/plugin]
8
        --socket         [/var/run/mysqld/mysqld.sock]
9
        --port           [0]
10
        --version        [5.5.44]
11
        --libmysqld-libs [-L/usr/lib/x86_64-linux-gnu -lmysqld -lpthread -lz -lm -lwrap -lcrypt -ldl -laio]
12
        --variable=VAR   VAR is one of:
13
                pkgincludedir [/usr/include/mysql]
14
                pkglibdir     [/usr/lib/x86_64-linux-gnu]
15
                plugindir     [/usr/lib/mysql/plugin]

von Klaus W. (mfgkw)


Lesenswert?

ja, und mit:
1
arm-linux-gnueabihf-gcc `mysql_config –cflags` `mysql_config –libs` ...

rufst du den Compiler auf und der Teil `mysql_config –cflags` wird 
ersetzt durch die Ausgabe des Befehls:
1
mysql_config –cflags
und der Teil `mysql_config –libs` wird ersetzt duch die Ausgabe von:
1
mysql_config –libs

Leider sind das wohl nicht die Kommandos, die du haben willst.
Du willst vermutlich vor cflags und libs jeweils zwei Bindestriche 
haben, wie es dir doch von der obigen Hilfe-Ausgabe erzählt wird.

Was dir passiert ist, ist folgendes:
Die genannten Kommandos sollen gültige Argumente liefern, die in die 
Argumente für den Compiler eingebaut werden. Weil du jeweils ein 
Minuszeichen verschusselt hast, gibt es statt der gewünschten Argumente 
den Hilfetext. Der ist für dich gedacht, aber der Compiler kann damit 
nichts anfangen.

von auron2008 (Gast)


Lesenswert?

Danke für die Erklärung zu dem ganzen. Die vielen Fehlermeldungen sind 
weg, jetzt bekam ich nur noch eine.
1
/usr/lib/x86_64-linux-gnu/libz.so: file not recognized: File format not recognized

Habe die Datei dann vom Raspberry /usr/lib/libz.so in mein Verzeichnis 
/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/lib/gcc/arm-lin
ux-gnueabihf/4.8.3  kopiert.

Nun ja, er gibt wieder ne Fehlermeldung und meint das er

tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib 
/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: 
warning: libstdc++.so.6, needed by 
/home/david/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x6 
4/lib/gcc/arm-linux-gnueabihf/4.8.3/libmysqlclient.so,  not found (try 
using -rpath or -rpath-link)

hab alle fehlenden Libraries mit in meinen Ordner kopiert und siehe da 
ich kann's übersetzen.

Wenn ich das Programm auf dem Raspberry ausführen möchte, dann kommt 
immer bash : permission denied. Wenn ich das Programm ohne Mysql 
Funtkionen übersetze und ausführe dann geht's komischerweise.

von Klaus W. (mfgkw)


Lesenswert?

auron2008 schrieb:
> bash : permission denied

evtl. liegt es nur an den Zugriffsrechten nach dem Übertragen?
Die Datei muß z.B. rwxr-xr-x als Rechte haben, wnen man sie mit ls -l 
anschaut.

von Tom (Gast)


Lesenswert?

auron2008 schrieb:
> bash : permission denied

gibt es WIMRE auch, wenn man versucht, ein 64-bit-Binary auf einem 
32-Bit-System zu starten.

von auron2008 (Gast)


Lesenswert?

Rechte der Datei sind : -rwxrwxrwx  1 root root 116611 Sep 23 12:00 
testmysql


Das wird mit dem MySQL zusammenliegen. Folgendes ist mir noch 
aufgefallen. Beim übersetzen gibt er mir eine Warnung aus, das er 
libstdc++.so.6 nicht finden kann, obwohl die Datei da ist.
1
tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: warning: libstdc++.so.6, needed by /usr/lib/arm-linux-gnueabihf/libmysqlclient.so, not found (try using -rpath or -rpath-link)

Und wie gesagt, wenn ich dieses Programm übersetze und dabei die Linker 
flags weglasse, dann geht's.
1
#include <stdio.h>
2
3
int main()
4
{
5
6
printf("Test\n");
7
  return 0;
8
}

von daniel (Gast)


Lesenswert?

Hallo,

wie die libmysqlclient.so gelinkt ist siehst du mit:
1
ldd libmysqlclient.so

Dein sysroot verzeichnis identifizierst du mit:
1
arm-linux-gnueabihf-gcc -v --version

Auf dem Zielsystem 'permission denied' bedeutet du fuehrst ungueltigen 
Code aus. Die Datei ist nicht fuer das Zielsystem kompiliert.

Ist deine 'libmysqlclient' bzw. die Anwendung ueberhaupt fuer das 
Zielsystem (cross) kompiliert?

Gruss
Daniel

von auron2008 (Gast)


Lesenswert?

daniel schrieb:
> ldd libmysqlclient.so

Wenn ich das versuche sagt er mir : das Programm ist nicht dynamisch 
gelinkt

daniel schrieb:
> arm-linux-gnueabihf-gcc -v --version

Das ergibt ne ziemlich lange ausgabe, aber ich denke das wichtige ist 
diese.
1
-isysroot /home/david/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/
 , sollte also stimmen.

daniel schrieb:
> Ist deine 'libmysqlclient' bzw. die Anwendung ueberhaupt fuer das
> Zielsystem (cross) kompiliert?

Ich habe die libmysqlclient.so direkt vom Raspberry kopiert. Wenn ich 
file testprogramm aufrufe, erhalte ich
1
ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /usr/include/mysql, for GNU/Linux 2.6.26, BuildID[sha1]=0721556c588086eb3c61cb1723d83dd2ce6aa383, not stripped
 , sollte also für den Raspberry passen.

von auron2008 (Gast)


Lesenswert?

Also ich bedanke mich für eure Hilfe, habe mir das Programm mal näher 
angesehen mit strace und dem gdb . Das Programm konnte die Bibliotheken 
aus  `mysql_config –libs` nicht finden, wie auch. Hab den Befehl auf dem 
Raspberry ausgeführt und die Ausgabe dem Linker übergeben und es 
funtkioniert.
1
-L/usr/lib/arm-linux-gnueabihf -lmysqlclient -lpthread -lz -lm -lrt -ldl

auron2008

von Planlos (Gast)


Lesenswert?

Wenn das Cross-Compile bei dir so viel Aufwand macht:
Installier dir halt einen Compiler am RasPi und mach alles dort.
Sicher, der Compilier-Vorgang dauert etwas länger, aber das holst du 
über eingesparte Forum-Posts locker wieder rein :)

von auron2008 (Gast)


Lesenswert?

Da wäre eine Idee, aber ich arbeite gerne mit Eclipse (nein das tu ich 
dem Raspberry nicht an) und außerdem lernt man durch solche 
Probleme/Fehler recht viel.

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.