===== GCC ===== Eine [[https://kristerw.blogspot.com/2017/09/useful-gcc-warning-options-not-enabled.html|Liste]] von nützlichen Warnungen, die normalerweise ausgeschaltet sind. ===== Dynamische Librarys (Shared Libraries) ===== Genaue Beschreibung unter http://www.linux-praxis.de/lpic1/lpi101/1.102.4.html Das System verwaltet die Librarys und lät diese automatisch, wenn sie gebraucht werden. Standardmässig liegen die ausführbaren Dateien unter /lib oder /usr/lib. Weitere Verzeichnisse können in der Datei /etc/ld.so.conf angegeben werden. Änderungen der Datei /etc/ld.so.conf müssen mit ldconfig aktiviert werden. Mit dem Befehl ldd kann geprüft werden, welche Libraries die Aplikation braucht und ob diese verfügbar sind. === RPATH === Im ausführbaren Programm kann über die Linkeroption -R ein sogenannter RPATH angegeben werden. Hier wird als erstes nach einem Shared Object gesucht. Der RPATH einer Datei kann mit readelf -d | grep RPATH angezeigt werden. Zum Ändern steht das Tool patchelf zur Verfügung. == Shared Objects === [[http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html|Hier]] sind shared libraries im Detail beschrieben. Jede shared library hat einen Namen (soname). Die Eigenschaften einer library können mit objdump angezeigt werden. Der SONAME wird mit objdump -p | grep SONAME angezeigt. ===== Valgrind ===== Mit Valgrind können Memory-Leaks entdeckt werden. Eine [[https://www.heise.de/developer/artikel/Einfuehrung-in-die-Arbeit-mit-Valgrind-und-Memcheck-Teil-1-2480976.html?seite=all|Einführung]] gibt es auf Heise. ===== Gerätetreiber ===== ein Buch über Gerätetrieber gibt es unter http://www.oreilly.de/german/freebooks/linuxdrive2ger/book1.html Linux-Gerätetreiber, 2. Auflage Alessandro Rubini & Jonathan Corbet \\ 2. Auflage April 2002 \\ ISBN 3-89721-138-6 \\ 608 Seiten, EUR 44,- (nicht mehr lieferbar) ===== Kernel Module ===== Die Kernel Module liegen normalerweise im Verzeichnis /lib/modules/Kernelversion. Dort werden die Module in Unterverzeichnisse aufgeteilt. Mit depmod werden die Abhängigkeiten geprüft und gespeichert. Eine ausführliche Beschreibung steht auf http://www.linux-praxis.de/lpic1/lpi102/1.105.1.html. ===== Core dumps ===== Ubuntu legt standardmäßig keine Core-Dumps an. Um Core-Dumps zu bekommen muß mit: ulimit -c [size] die Größe für die Core-Dumps eingestellt werden. Die Größe wird in kB angegeben. Dann speichert Ubuntu die Core-Dumps für alle installierten Pakete. Damit die Core-Dumps auch für eigene Programme gespeichert werden, ist eine Konfigurationsdatei ~/.config/apport/settings notwendig. Die Datei muß folgendes enthalten: [main] unpackaged=true Wenn nun alle Einstellungen korrekt sind, wird ein Core-Dump nach /var/crash geschrieben. Die Log-Meldungen stehen in /var/log/apport.log. Das Dumpfile ist gepackt und muß zum Debuggen noch mit apport-unpack ausgepackt werden. Anschliesend kann es mit gdb geöffnet werden: gdb /CoreDump Link: https://stackoverflow.com/questions/2065912/core-dumped-but-core-file-is-not-in-current-directory ===== MS SQL über ODBC ===== Auf eine MS SQL Datenbank kann mit unixODBC und FreeTDS zugegriffen werden. Dazu müssen die notwendigen Pakete installiert werden. Damit Qt die ODBC-Schnittstelle verwenden kann muss noch libqt5sql5-odbc installiert sein. Hier http://help.interfaceware.com/kb/904 ist beschrieben, wie unixODBC und FreeTDS zu installieren ist. Installation der Komponenten: sudo apt-get install unixodbc sudo apt-get install tdsodbc sudo apt-get install libqt5sql5-odbc Beispielkofiguration in /etc/odbcinst.ini: [FreeTDS] Description = FreeTDS Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so FileUsage = 1 CPTimeout = CPResuse = client charset = utf-8 Trace=Yes Beispielkofiguration in /etc/odbc.ini: [SolarEdge] Driver = FreeTDS Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so Server = 192.168.68.134 Port = 1433 Database = FPI In den Eckigen Klammern wird der Datenbankname angegeben, wie er von der Applikation verwendet wird. Bei Server steht die IP oder URL des DB-Severs. Database beschreibt den Namen der Datenbank auf dem Server