Ik probeer een programma te schrijven wat gecompileerd en wel overal als package moet kunnen werken op x86 linux systemen.
Ik kan eventueel de huidige compileer scripts online zetten. Deze scripts (gewoon met die standaard ./configure en makefiles) zorgen ervoor dat van libmysqlclient.so.15 gebruik wordt gemaakt. Het programma functioneert hiermee juist, maar op een ander systeem gaat dat niet omdat dat bestand ontbreekt. In de binary vind ik verwijzingen naar libmysqlclient.so.15. Als ik mijn versie naar ander systeem move, dan blijft het programma hangen (ik heb nog geen lange debug kunnen doen maar 'tis ook logisch aangezien deze .so files zelf ook nog op andere libaries rusten)
Oplossing lijkt simpel: Static compileren. Dit heeft alleen wat meer voeten in de aarde dan dat het lijkt. De makefile scripts zijn via een soort project-systeem voor het grootste deel gemaakt (dat heeft een duitse vriend gedaan). We komen er alleen niet uit hoe we dit statisch moeten compileren. Alle opties al meegegeven, ik heb de makefile bewerkt, ik heb de output die het programma uiteindelijk compileerd (gcc blablabla) al aangepast met allerlei opties gevonden op internet, maar het blijft niet lukken.
Ook heb ik powerdns, die statisch te compileren valt (er zijn packages voor namelijk zoals .deb's) gedownload en met de optie voor statische binaries gecompileerd. Dit werkt prima. Alleen wil het overnemen van commando's uit de makefiles nog niet lukken.
Waar ik wel uit ben is dat gebruik moet worden gemaakt van libmysqlclient.a, omdat dit de statische versie is van libmysqlclient.so (die zelf weer op andere bronnen rust). Na wat doe wil het geheel soms compileren, maar dan komt de fout:
*** glibc detected *** double free or corruption (!prev): 0x081fafa0 ***
Heeft iemand voor mij enige informatie over het maken van het programma met een vaste libmysqlclient? Op google is helaas zeer weinig te vinden over mysql en op statisch compileren op zichzelf. Misschien is er ergens een prachtige makefile generator? Het programma is zeer klein en berust kwa libaries eigenlijk alleen op standaard libaries van C en dit mysql libary.
Mijn dank is groot voor een oplossing!
edit:
Iedereen vraagt mij steeds"Waarom" ik dit wil. Even korte uitleg:
- Ik wil het programma binary werkend kunnen hebben op machines. Zo kan iedereen het downloaden en zonder moeite installeren, zonder extra's nodig te hebben.
Ik heb net nog iets geprobeerd: De libmysqlclient.a file dynamic compileren. Ik dacht, dan heb ik alleen die .a nodig en niet de dependencies van libmysqlclient zelf. Het programma draait zelfs! Maar wel alleen op mijn machine. Zodra ik het kopieer, draait het programma (ik zie berichten) totdat de eerste connectie naar mysql database wordt opgezet. Dan krijg ik gelijk weer zo'n glibc fout. Ik heb toen van het systeem alle libmysqlclient.a files gerenamed, en mijn versie erop gezet, zonder succes.
Wat mij ook opviel is dat als ik de binary file doorzoek (met texteditor) dan kan ik altijd libmysqlclient.so.15 terugvinden, maar in het geval dat ik tegen de .a compileer, kan ik nergens meer iets over een .a file terugvinden.
Nou hele lap tekst zo nu maar wie weet is het behulpzaam. Ik denk dat de handigste oplossing gewoon static compileren is. Het moet kunnen, maar hóe!
Ik kan eventueel de huidige compileer scripts online zetten. Deze scripts (gewoon met die standaard ./configure en makefiles) zorgen ervoor dat van libmysqlclient.so.15 gebruik wordt gemaakt. Het programma functioneert hiermee juist, maar op een ander systeem gaat dat niet omdat dat bestand ontbreekt. In de binary vind ik verwijzingen naar libmysqlclient.so.15. Als ik mijn versie naar ander systeem move, dan blijft het programma hangen (ik heb nog geen lange debug kunnen doen maar 'tis ook logisch aangezien deze .so files zelf ook nog op andere libaries rusten)
Oplossing lijkt simpel: Static compileren. Dit heeft alleen wat meer voeten in de aarde dan dat het lijkt. De makefile scripts zijn via een soort project-systeem voor het grootste deel gemaakt (dat heeft een duitse vriend gedaan). We komen er alleen niet uit hoe we dit statisch moeten compileren. Alle opties al meegegeven, ik heb de makefile bewerkt, ik heb de output die het programma uiteindelijk compileerd (gcc blablabla) al aangepast met allerlei opties gevonden op internet, maar het blijft niet lukken.
Ook heb ik powerdns, die statisch te compileren valt (er zijn packages voor namelijk zoals .deb's) gedownload en met de optie voor statische binaries gecompileerd. Dit werkt prima. Alleen wil het overnemen van commando's uit de makefiles nog niet lukken.
Waar ik wel uit ben is dat gebruik moet worden gemaakt van libmysqlclient.a, omdat dit de statische versie is van libmysqlclient.so (die zelf weer op andere bronnen rust). Na wat doe wil het geheel soms compileren, maar dan komt de fout:
*** glibc detected *** double free or corruption (!prev): 0x081fafa0 ***
Heeft iemand voor mij enige informatie over het maken van het programma met een vaste libmysqlclient? Op google is helaas zeer weinig te vinden over mysql en op statisch compileren op zichzelf. Misschien is er ergens een prachtige makefile generator? Het programma is zeer klein en berust kwa libaries eigenlijk alleen op standaard libaries van C en dit mysql libary.
Mijn dank is groot voor een oplossing!
edit:
Iedereen vraagt mij steeds"Waarom" ik dit wil. Even korte uitleg:
- Ik wil het programma binary werkend kunnen hebben op machines. Zo kan iedereen het downloaden en zonder moeite installeren, zonder extra's nodig te hebben.
Ik heb net nog iets geprobeerd: De libmysqlclient.a file dynamic compileren. Ik dacht, dan heb ik alleen die .a nodig en niet de dependencies van libmysqlclient zelf. Het programma draait zelfs! Maar wel alleen op mijn machine. Zodra ik het kopieer, draait het programma (ik zie berichten) totdat de eerste connectie naar mysql database wordt opgezet. Dan krijg ik gelijk weer zo'n glibc fout. Ik heb toen van het systeem alle libmysqlclient.a files gerenamed, en mijn versie erop gezet, zonder succes.
Wat mij ook opviel is dat als ik de binary file doorzoek (met texteditor) dan kan ik altijd libmysqlclient.so.15 terugvinden, maar in het geval dat ik tegen de .a compileer, kan ik nergens meer iets over een .a file terugvinden.
Nou hele lap tekst zo nu maar wie weet is het behulpzaam. Ik denk dat de handigste oplossing gewoon static compileren is. Het moet kunnen, maar hóe!
[ Voor 27% gewijzigd door pierre-oord op 19-12-2005 00:09 ]
Ondernemer in tech (oud LOQED.com, nu UpToMore.com)