Forum: PC-Programmierung MIt g++ statt cmake und make kompilieren


von Josh W. (joshua_p)


Lesenswert?

Hi,
ich arbeite gerade an einem Oled, welches über ein USB-I2C Interface 
später über den Pc angesprochen werden soll. Es gibt auch eine 
Bibliothek dafür:

https://github.com/AndrewFromMelbourne/libSSD1306

Jedoch kann ich nur die Beispiele mit cmake . und make kompilieren und 
erfoglreich ausführen. Aber wie kann ich jetzt meine eigenen Projekte 
kompilieren?
Die Ordner Struktur ist:
Hauptverzeichnis:
examples--> enthält Beispiele.cxx
lib--> enthält Header und korrespondierende .cxx Dateien
Makefile

Ich hab es schon so probiert:
1
g++ my_test_oled.cxx -o my_test_oled -I /home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11


Aber es kommen Fehler wie:
1
Nicht definierter Verweis auf `SSD1306::OledI2C::displayUpdate()'

Wo habe ich den Fehler bei den Argumenten?

Gruß Joshua

von R. M. (n_a_n)


Lesenswert?

evtl. so
1
g++ my_test_oled.cxx lib/OledPixel.cxx  lib/OledFont8x8.cxx  lib/OledFont8x12.cxx  lib/OledFont8x16.cxx  lib/OledGraphics.cxx   lib/OledI2C.cxx -o my_test_oled -I /home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11

oder Du baust Dir eine Lib und bindest die mit -L <pfad zur Lib> 
-l<libname> ein.

von Josh W. (joshua_p)


Lesenswert?

R. M. schrieb:
> g++ my_test_oled.cxx lib/OledPixel.cxx  lib/OledFont8x8.cxx
> lib/OledFont8x12.cxx  lib/OledFont8x16.cxx  lib/OledGraphics.cxx
> lib/OledI2C.cxx -o my_test_oled -I
> /home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11

Hi, danke für die schnelle Antwort, jeodoch kommt bei deinem Vorschlag 
das gleiche raus.
1
g++ test_jp.cxx lib/OledPixel.cxx  lib/OledFont8x8.cxx  lib/OledFont8x12.cxx  lib/OledFont8x16.cxx  lib/OledGraphics.cxx  lib/OledI2C.cxx  -o my_test_oled -I /home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11
2
/tmp/ccdkxEPj.o: In Funktion `main':
3
test_jp.cxx:(.text+0xdd): Nicht definierter Verweis auf `LinuxKeys::LinuxKeys()'
4
test_jp.cxx:(.text+0x114): Nicht definierter Verweis auf `LinuxKeys::pressed() const'
5
test_jp.cxx:(.text+0x1c2): Nicht definierter Verweis auf `LinuxKeys::~LinuxKeys()'
6
test_jp.cxx:(.text+0x237): Nicht definierter Verweis auf `LinuxKeys::~LinuxKeys()'
7
/tmp/ccEXgTnz.o: In Funktion `SSD1306::OledI2C::OledI2C(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char)':
8
OledI2C.cxx:(.text+0x150): Nicht definierter Verweis auf `SSD1306::FileDescriptor::FileDescriptor(int, std::function<bool (int)>)'
9
OledI2C.cxx:(.text+0x44a): Nicht definierter Verweis auf `SSD1306::FileDescriptor::FileDescriptor(int, std::function<bool (int)>)'
10
OledI2C.cxx:(.text+0x464): Nicht definierter Verweis auf `SSD1306::FileDescriptor::operator=(SSD1306::FileDescriptor&&)'
11
OledI2C.cxx:(.text+0x470): Nicht definierter Verweis auf `SSD1306::FileDescriptor::~FileDescriptor()'
12
OledI2C.cxx:(.text+0x6b3): Nicht definierter Verweis auf `SSD1306::FileDescriptor::~FileDescriptor()'
13
OledI2C.cxx:(.text+0x796): Nicht definierter Verweis auf `SSD1306::FileDescriptor::~FileDescriptor()'
14
OledI2C.cxx:(.text+0x7bd): Nicht definierter Verweis auf `SSD1306::OledHardware::~OledHardware()'
15
/tmp/ccEXgTnz.o: In Funktion `SSD1306::OledI2C::~OledI2C()':
16
OledI2C.cxx:(.text+0x81b): Nicht definierter Verweis auf `SSD1306::FileDescriptor::~FileDescriptor()'
17
OledI2C.cxx:(.text+0x837): Nicht definierter Verweis auf `SSD1306::OledHardware::~OledHardware()'
18
collect2: error: ld returned 1 exit status

Im Ordner lib ist eine libSSD1306.a und mit
1
g++ test_jp.cxx -o test_oled -L lib/libSSD1306.a -I /home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11
 kommt auch das gleich raus :/

von R. M. (n_a_n)


Lesenswert?

lass mal das -L bei -L lib/libSSD1306.a weg
also nur
g++ test_jp.cxx -o test_oled  lib/libSSD1306.a -I 
/home/eagle/Downloads/libSSD1306-master/lib/ -std=c++11

von Josh W. (joshua_p)


Lesenswert?

Super, vielen Dank!

Gruß
Joshua

Beitrag #5220964 wurde vom Autor gelöscht.
von Rolf M. (rmagnus)


Lesenswert?

R. M. schrieb:
> lass mal das -L bei -L lib/libSSD1306.a weg

Alternativ -Llib -lSSD1306
Mit -L gibt man ein Verzeichnis an, in dem Libs gesucht werden sollen. 
Mit -l gibt man dann eine Bibliothek an, die gelinkt werden soll, 
allerdings ohne das lib am Anfang und ohne die Endung. Mit .a-Files 
geht's aber auch ganz ohne, da so ein File nix anderes ist als ein 
Archiv aus einem oder mehreren Object-Files. Gibt man das .a-File ohne 
irgendein -l an, ist das das gleiche, als hätte man die enthaltenen 
.o-Files alle einzeln angegeben.

von MaWin O. (Gast)


Lesenswert?

Warum verwendest du nicht einfach cmake?

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.