Anzeige:
Ergebnis 1 bis 14 von 14

Thema: lib dynamisch einbinden

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.04.2006
    Beiträge
    14

    lib dynamisch einbinden

    Hi
    ich such jetzt schon länger aber irgendwie find ich nichts dazu.

    Das Problem ist das ich ein Programm hab wo die mysqlclient.so.12 eingebunden wird. Jetzt hab ich mein System neu gemacht und nun kann ich das Programm nicht mehr starten da auf dem System eine mysqlclient.so.14 und nicht mehr .12 liegt. Ich hab jetzt gesehn das in dem Ordner auch ein Verweis (mysqlclient.so) auf die neue Datei zeigt.
    Jetzt ist die Frage: wie kann ich mein Programm so compelieren, dass ich die mysqlclient.so einbinde und nicht mehr die mysqlclient.so.xx?
    Benutzen tu ich Kdevelop mit QT.
    Wäre für jeden Tip dankbar.

    gruß Chaostrupp

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Vermutlich mußt du neu kompilieren. Die erste Zahl nach dem .so ist normalerweise eine Major Version Number, d.h. daß sie nicht kompatibel zu ihren Vorgängern ist. Darum generiert der Linker auch Abhängigkeiten die diese Zahl beinhaltet, nicht aber die danach folgenden Zahlen.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    17.04.2006
    Beiträge
    14
    Das heißt man muss für jede Version von mysqlclient eine Version von seinem eigenen Programm erzeugen? Das mag zwar kein Problem sein wenn ich den Quelltext offen legen, aber das wollte ich eigentlich nicht tun.
    Es muss doch von daher eine andere Möglichkeit geben. Wie machen das den komerzielle Firmen? Die veröffentlichen ihren Quelltext doch auch nicht und werden bestimmt keine 30 Versionen zu verfügung stellen für die ganzen Unterschiedlichen Distries und co.
    Oder ist das etwa der Grund warum es so wenig Programme für Linux zu kaufen gibt?

    gruß Chaostrupp

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Das heißt man muss für jede Version von mysqlclient eine Version von seinem eigenen Programm erzeugen?
    Nicht notwendigerweise. Du dokumentierst einfach, welche Version benötigt wird, dann kann der Nutzer sie bei Bedarf installieren.

    Das mag zwar kein Problem sein wenn ich den Quelltext offen legen, aber das wollte ich eigentlich nicht tun.
    Ist Mysql nicht unter der GPL veröffentlicht? Dann müsstest du sowieso auf Nachfrage deinen Quelltext bereitstellen, sofern du dein Programm als Binary vertreibst. Oder hast du eine kommerzielle Lizenz von Mysql?

    Oder ist das etwa der Grund warum es so wenig Programme für Linux zu kaufen gibt?
    Das weiß keiner genau, aber da es die gleiche libmysqlclient für alle Systeme ist, glaube ich nicht, daß da ein Zusammenhang ist.

  5. #5
    Registrierter Benutzer
    Registriert seit
    17.04.2006
    Beiträge
    14
    Zitat Zitat von locus vivendi
    Nicht notwendigerweise. Du dokumentierst einfach, welche Version benötigt wird, dann kann der Nutzer sie bei Bedarf installieren.
    Hm muss ich dann nochmal testen hatte jetzt nur die Datei reinkopiert an die Stelle wo er es haben wollte aber da hat er dann gesagt das man die Version updaten soll.

    Zitat Zitat von locus vivendi
    Ist Mysql nicht unter der GPL veröffentlicht? Dann müsstest du sowieso auf Nachfrage deinen Quelltext bereitstellen, sofern du dein Programm als Binary vertreibst. Oder hast du eine kommerzielle Lizenz von Mysql?
    Ich benutz MySQL++ library und das steht unter LGPL. Der Anwender verwendet doch die Datenbank und selbst wenn, solang der jenige damit kein Umsatz macht ist doch ok. Ein Webdesigner verkauft doch auch nur seine Seite und nicht die SQL Datenbank dazu. Wenn man ein Server hat und den Webspace mit einer MySQL Datenbank verkauft braucht man glaub ich eine. Oder? Und da ich eher ein Webdesigner bin geht es ja auch ohne.

    Zitat Zitat von locus vivendi
    Das weiß keiner genau, aber da es die gleiche libmysqlclient für alle Systeme ist, glaube ich nicht, daß da ein Zusammenhang ist.
    Na aber warum machen die das nicht einfach abwährskompatibel? Ist doch so enorm umständlich! Ich benutz nur einfache Insert, und Select Anweisungen, dass ist dann ein wenig übertrieben find ich, wo man doch nur das einfachste vom Einfachen benötigt.

    gruß Chaostrupp

  6. #6
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Zitat:
    Zitat von locus vivendi
    Ist Mysql nicht unter der GPL veröffentlicht? Dann müsstest du sowieso auf Nachfrage deinen Quelltext bereitstellen, sofern du dein Programm als Binary vertreibst. Oder hast du eine kommerzielle Lizenz von Mysql?
    Ich benutz MySQL++ library und das steht unter LGPL. Der Anwender verwendet doch die Datenbank und selbst wenn, solang der jenige damit kein Umsatz macht ist doch ok. Ein Webdesigner verkauft doch auch nur seine Seite und nicht die SQL Datenbank dazu. Wenn man ein Server hat und den Webspace mit einer MySQL Datenbank verkauft braucht man glaub ich eine. Oder? Und da ich eher ein Webdesigner bin geht es ja auch ohne.
    Sollte deine Programm in irgendeiner Weise gegen Code von Mysql linken, und du benutzt die GPL-Version, dann würde ich dennoch überprüfen, ob du GPL-kompatibel lizensieren musst.

    Na aber warum machen die das nicht einfach abwährskompatibel? Ist doch so enorm umständlich! Ich benutz nur einfache Insert, und Select Anweisungen, dass ist dann ein wenig übertrieben find ich, wo man doch nur das einfachste vom Einfachen benötigt.
    Es ergibt sich meistens so, daß Änderungen nach und nach erfolgen. Und gelegentlich verändern die halt das ABI. Wenn genügend Ressourcen da sind könnte man z.B. auch zwei APIs pflegen: Eins welches ABI-kompatibel bleiben soll, und eines welches "direkter" mit der Datenbank umgeht, und bei dem man in Kauf nimmt das sich das ABI häufiger ändert. Du schreibst, dass du nur minimale Funktionalität verwendest. Dann kannst du selber diesen Weg gehen, und einen eigenen Wrapper schreiben. Dann kannst du die ABI-Stabilität garantieren, die du brauchst. Plus, du kannst unter umständen auch die Datenbank wechseln. Ich weiß nicht, ob es so einen Wrapper vielleicht sogar schon gibt. Googel doch mal, und benutze Freshmeat, Sourceforge etc...

  7. #7
    Registrierter Benutzer Avatar von panzi
    Registriert seit
    04.05.2001
    Ort
    Kottingbrunn
    Beiträge
    609
    Zitat Zitat von chaostrupp
    Ich benutz MySQL++ library und das steht unter LGPL. Der Anwender verwendet doch die Datenbank und selbst wenn, solang der jenige damit kein Umsatz macht ist doch ok. Ein Webdesigner verkauft doch auch nur seine Seite und nicht die SQL Datenbank dazu.
    Ja aber er muss die SQL Datenbank kaufen (der webdesigner) damit er entsprechende Produkte auf der basis der DB anbiten darf. So ist es bei proprietärer Software. Bei open source ist die bedingung anders, da musst du halt auch deinen Quellcode freigeben. Deswegen gibts bei MySQL, Qt, etc. diese Duallizenzen: Die, die opensoure schreiben dürfen das, die die propriäteres schreiben dürfen das auch closed source machen, müssen dann aber was zahlen. Ist nur fair und finanziert so die Entwicklung der entsprechenden Software.
    Intel Core 2 Duo CPU 2.66GHz; Nvidia GeForce 8 8800 GTS; 4GB RAM; Fedora 12; KDE-testing

  8. #8
    Registrierter Benutzer
    Registriert seit
    17.04.2006
    Beiträge
    14
    @locus vivendi: Die MySQL++ ist ja ein Wrapper aber benutzt halt trotzdem den mysqlclient. Selbst das Admintool von MySQL benötigt die Dateien.
    Obwohl bei dem Admintool als RPM von dennen ist mir aufgefallen, dass die ebend nur eine Datei anbieten und ich hab es problemlos installiert bekommen. Ist nur die Frage wie machen die das ohne das mehrfach zu kompelieren und trotzdem für alle mysqlclient Versionen funktioniert? Ich will ja genau das selbe praktisch: eine RPM die man installiert und fertig.

    zu den Lizenzen:
    Auf der Seite: http://www.mysql.de/company/legal/licensing/ hab ich mir das jetzt mal angeschaut und versucht draus schlau zu werden, aber so wirklich klar ist mir das System immer noch nicht. Für das Programm was ich machen will ist mir jetzt zwar klar das ich eine brauche, aber noch nicht so richtig welche.
    Seh ich das jetzt richtig:
    Bei Programmen (keine open source) mit MySQL Anbindung:
    - benötigt der Programmierer eine OEM-Lizenz
    - beim Kunden unterschiedliche je nachdem wie er es verwenden will
    Bei Webseiten (kein open source) mit MySQL Anbindung:
    - das selbe wie bei normalen Programmen
    Bei Provider die Webspace mit MySQL anbieten:
    - benötigen eine MySQL Network Lizenz

    Obwohl ich glaub ich frag einfach mal bei dennen an, dann bin ich zumindest auf der sicheren Seite.
    Geändert von chaostrupp (17-06-2006 um 14:53 Uhr)

  9. #9
    Registrierter Benutzer
    Registriert seit
    17.04.2006
    Beiträge
    14
    Hab jetzt im Forum eine PDF gefunden http://www.kitebird.com/mysql-book/ch06-2ed-de.pdf
    werd mir die mal anschauen vielleicht hilft sie ja bei meinem Problem.

    gruß Chaostrupp

  10. #10
    Registrierter Benutzer
    Registriert seit
    23.05.2004
    Beiträge
    592
    Obwohl bei dem Admintool als RPM von dennen ist mir aufgefallen, dass die ebend nur eine Datei anbieten und ich hab es problemlos installiert bekommen. Ist nur die Frage wie machen die das ohne das mehrfach zu kompelieren und trotzdem für alle mysqlclient Versionen funktioniert?
    Vielleicht tut es das ja gar nicht? Eine RPM ist normalerweise für eine bestimmte Distribution, d.h. die Pakete sind aufeinander abgestimmt.

    Ich will ja genau das selbe praktisch: eine RPM die man installiert und fertig.
    Ich habe ja schon eine Vorschlag gemacht, der zwar noch nicht die ganze Lösung ist, aber schon zu einem großen Teil, nämlich einen eigenen Wrapper zu schreiben. Das lohnt sich natürlich nur, wenn du wirklich nur wenig Funktionalität des Original-APIs verwendest. Wenn du wirklich nur eine RPM vertreiben willst, dann könntest du z.B. diesen Wrapper mehrfach als Bibliothek gegen unterschiedliche Libmysqlclient-Versionen kompiliert in die RPM reinpacken, und entsprechend der vorhanden Version installieren. Oder du legst die passende Libmysqlclient-Version bei.

    Vorher würde ich aber folgendes tun:
    1. Mich informieren welche Libmysqlclient-Versionen denn nun tatsächlich ABI-kompatibel sind, und welche nicht.
    2. Mich informieren, wie man als Programmierer Binärkompatible Versionen schreibt. Bei KDE ist dazu etwas zu lesen, Link unten.
    3. Nach einem Datenbank-API suchen, welches mit Binärkompatibilität im Kopf entwurfen ist. (Qt hat z.B. Datenbanklassen. Ist aber GPL).
    Solltest du soetwas finden, wäre es übrigens ganz nett, wenn du das hier noch mal verlinkst.

    http://developer.kde.org/documentati...atibility.html

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von chaostrupp
    Das heißt man muss für jede Version von mysqlclient eine Version von seinem eigenen Programm erzeugen?
    Nein, natürlich nicht unbedingt. In Qt erfolgt der Datenbankzugriff zum Beispiel über Plugins, d.h. man bräuchte nur je ein Plugin für inkompatible Versionen der Datenbankbibliothek.

    In deinem Falle könntest du eine Abstraktion für deine Zwecke machen und je ein Plugin für die beiden Versionen implementieren. Ist aber schon einiges an Aufwand.

    Wenn MySQL++ eine eigenständige Implementierung des MySQL Client/Server Protokolls ist, steht natürlich die Lizenz für sich alleine.
    Wenn es ein Wrapper um die MySQL Client Bibliothek ist, gelten selbstverständlich auch deren Bestimmungen, d.h. eine Kombination von beiden.

    Zum Beispiel ein LGPL Wrapper um eine Dual-licenced Bibliothek ist zusammen mit der GPL Lizenz der Basisbibliothek selbst effektiv auch unter GPL, mit der closed-source Lizenz zusammen sichert sie nur die Freiheiten der LGPL.

    In deinem Fall brauchst du für ein GPL kompatibel lizenziertes Produkt (kann zB BSD oder lizenziert sein) nur die freien Versionen der dual-licenced Basis, im Falle eines closed-source Produktes natürlich die entsprechenden "kommerziellen" Lizenzen, zB im Falle von Qt4 und einer GUI die Desktop Licence für eine Plattform

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    Gibt es fuer linux eigentlich sowas wie nen dependencie walker ? Also wo man sieht welche .so von welcher in welcher version abhaengig ist ?

    Normal sollte die libmysql.soXX von der c++ runtime(hat linux sowas ueberhaupt ? ), von dem BS api, also posix oder systemV system calls (tcp/ip stack) und vielleicht von noch bisserl shared momeory geschichten (welche wahrscheinlich aber scho in der BS API zu finden sind) abhaengig sein ...

    Das heisst das es "wahrscheinlich" null probleme gibt, ne libmysql.so.14 und ne libmysql.so.12 auf einem system nebeneinander zu betrieben.

    musst halt nur die richtige version "verlinken" und evtl. mit ausliefern, das die clientlib zum server compatibel iss sei mal vorausgesetz.

    Die sauberste version iss natuerlich das plugin System, und bei einigermassen professionellen absichten auf alle faelle vorzuziehen ....

    Ciao ...

  13. #13
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Zitat Zitat von RHBaum
    Gibt es fuer linux eigentlich sowas wie nen dependencie walker ? Also wo man sieht welche .so von welcher in welcher version abhaengig ist ?
    ldd

    Normal sollte die libmysql.soXX von der c++ runtime(hat linux sowas ueberhaupt ? )
    Ohne C++ Standardbibliothek kein C++

    Das heisst das es "wahrscheinlich" null probleme gibt, ne libmysql.so.14 und ne libmysql.so.12 auf einem system nebeneinander zu betrieben.
    Also ich würde sogar sagen, der Umkehrfall, also daß sie nicht nebeneinander betrieben werden können, ist extrem unwahrscheinlich. Sind ja zwei verschiedene Bibliotheken.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  14. #14
    Registrierter Benutzer
    Registriert seit
    18.03.2005
    Beiträge
    211
    Ohne C++ Standardbibliothek kein C++
    haett ja sein koennen,das es fuern gcc keine lib (.a) sondern irgendwas anderes binaerisches iss, was zum executiable immer mit dazugepappt wird ^^

    Aber hasst recht, bei linux mit ihrer konsequenten modularitaet eher unwahrscheinlich, das wuerde bei MS besser auf die fahnen passen ^^

    Ciao ...

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •