{"id":224,"date":"2019-01-24T11:26:00","date_gmt":"2019-01-24T11:26:00","guid":{"rendered":"http:\/\/devblog.cssec.de\/?p=224"},"modified":"2020-06-24T07:45:31","modified_gmt":"2020-06-24T07:45:31","slug":"oci-treiber-fuer-qt-kompilieren","status":"publish","type":"post","link":"https:\/\/www.cssec.de\/blog\/2019\/01\/24\/oci-treiber-fuer-qt-kompilieren\/","title":{"rendered":"OCI-Treiber f\u00fcr Qt kompilieren"},"content":{"rendered":"<p>Hallo mal wieder,<\/p>\n<p>vor etlicher Zeit, bestimmt so ca. vor 4-5 Jahren habe ich f\u00fcr mein Laserfeed-Projekt auf meinem PC ein Qt eingerichtet und f\u00fcr die Datenbank-Verbindung irgendwann einmal die SQL-Treiber kompiliert.<br \/>\nIch bin froh, dass ich den PC immer noch nicht mal neu aufsetzen musste, irgendwie habe ich es bisher nicht geschafft die Entwicklungsumgebung mal auf Windows 10 zu heben und meine Projekte wirklich ohne Probleme zum \u00dcbersetzen \/ Laufen zu bringen.<br \/>\nDa mein PC noch auf Windows 7 l\u00e4uft und demn\u00e4chst ja leider der Support f\u00fcr Windows 7 endet, leider auch meine Festplatten-Konfiguration kein Upgrade auf Windows 10 zul\u00e4sst, muss ich demn\u00e4chst mal eine komplette Neuinstallation meines Rechners durchf\u00fchren. Das ist echt Mist, aber leider nicht zu vermeiden.<\/p>\n<p>Um das zu \u00fcben, habe ich jetzt erst einmal versucht, Qt 4.8.5 (ja, das ist echt alt, aber l\u00e4uft immerhin noch) auf mein Notebook zu bekommen und dort mal meine Projekte zu \u00fcbersetzen.<br \/>\nDazu ben\u00f6tige ich dummerweise auch den Oracle-SQL-Treiber, da sowohl mein neues Tool als auch Laserfeed gegen eine Oracle Express-Datenbank laufen.<\/p>\n<p>Zwar gibt es ein Tutorial: <a href=\"http:\/\/doc.qt.io\/archives\/qt-4.8\/sql-driver.html\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/doc.qt.io\/archives\/qt-4.8\/sql-driver.html<\/a>, wie man die OCI-Treiber kompiliert, spannenderweise funktioniert der Windows-Compile so wie angegeben NICHT!!!<\/p>\n<p>Daher mal ein kurzes Tutorial von mir.<br \/>\nAls erstes ben\u00f6tigt ihr ein instant-client-sdk, welchen ihr bei Oracle direkt herunterladen k\u00f6nnt. Wichtig hierbei ist, dass, wenn ihr wie ich einen mingw32-Compiler nutzt, auch eine 32-bit-Variante des instant_client herunterladet. Den findet ihr hier: <a href=\"https:\/\/www.oracle.com\/technetwork\/topics\/winsoft-085727.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.oracle.com\/technetwork\/topics\/winsoft-085727.html<\/a>.<br \/>\nHier braucht man das sowohl den &#8222;normalen&#8220; instant-client (instantclient-basic-nt&#8230;) und auch das <strong>SDK<\/strong> (instantclient-sdk-nt).<br \/>\nZum \u00dcbersetzen w\u00fcrde prinzipiell das sdk reichen, aber f\u00fcr die Ausf\u00fchrung der Anwendung ben\u00f6tigt ihr auch noch die dll&#8217;s des instantclient-basic-Paketes.<\/p>\n<p>Nach Installation beider Pakete (am besten ins gleiche Verzeichnis) \u00f6ffnet eine Kommandozeile und wechselt in das Quell-Verzeichnis des OCI-Plugins der Qt-Installation. In meinem Fall liegt Qt unter E:\\Qt\\4.8.5<\/p>\n<p><code><br \/>\ncd \/D E:\\Qt\\4.8.5\\src\\plugins\\sqldrivers\\oci<br \/>\n<\/code><\/p>\n<p>Entgegen der offiziellen Anleitung funktioniert das Setzen der Umgebungsvariablen so nicht. Stattdessen habe ich mich einfach an die Linux\/Mac-Anleitung gehalten.<\/p>\n<p>Gebt auf der Kommandozeile folgendes ein:<br \/>\n<code><br \/>\nqmake \"INCLUDEPATH+=&lt;PATH&gt;\/sdk\/include\" \"LIBS+=-L &lt;PATH&gt;\/sdk\/lib\/msvc -loci\" oci.pro<br \/>\n<\/code><\/p>\n<p>Ersetzt dabei &lt;PATH&gt; durch den Pfad, in den ihr euren Instantclient installiert habt. Achtet darauf, dort bitte Forward-Slashes, also &#8222;\/&#8220; statt &#8222;\\&#8220; zu nutzen. In dem Beispielaufruf gehe ich auch davon aus, dass die SDK-Komponente direkt in das Instant-Client-Basic-Verzeichnis installiert wurde, das SDK-Verzeichnis legt das entpacken des SDK-Zips dann entsprechend selbst an.<\/p>\n<p>Wenn ihr Euch beim Verzeichnis nicht verschrieben habt (wie das in meinen ersten paar Versuchen der Fall war \ud83d\ude42 ), sollte das problemlos funktionieren. Anschlie\u00dfend k\u00f6nnt ihr im gleichen Verzeichnis dann das make aufrufen.<\/p>\n<p><code><br \/>\nmingw32-make release<br \/>\n<\/code><\/p>\n<p>bzw.<\/p>\n<p><code><br \/>\nmingw32-make debug<br \/>\n<\/code><\/p>\n<p>Beides hat dann funktioniert. Wichtig bei der Ausf\u00fchrung Eures Programmes ist dann, dass die dll&#8217;s des Instantclient entweder in Eurem Pfad oder (das mache ich meistens so) in den Projektverzeichnis liegen. Dann sollte auch eine Datenbankverbindung aufgebaut werden k\u00f6nnen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hallo mal wieder, vor etlicher Zeit, bestimmt so ca. vor 4-5 Jahren habe ich f\u00fcr mein Laserfeed-Projekt auf meinem PC ein Qt eingerichtet und f\u00fcr die Datenbank-Verbindung irgendwann einmal die SQL-Treiber kompiliert. Ich bin froh, dass ich den PC immer noch nicht mal neu aufsetzen musste, irgendwie habe ich es bisher nicht geschafft die Entwicklungsumgebung [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,13,6],"tags":[],"_links":{"self":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/224"}],"collection":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/comments?post=224"}],"version-history":[{"count":3,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/224\/revisions"}],"predecessor-version":[{"id":446,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/posts\/224\/revisions\/446"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media\/225"}],"wp:attachment":[{"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/media?parent=224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/categories?post=224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cssec.de\/blog\/wp-json\/wp\/v2\/tags?post=224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}