MIt g++ statt cmake und make kompilieren

OP #5220913
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
#5220931
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.
OP #5220945
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 :/
Beitrag #5220964 wurde von einem Moderator gelöscht.
#5221111
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.

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