gwenhyfar - configure & make auf dem mac

 
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 13
Dabei seit: 02 / 2010
Betreff:

gwenhyfar - configure & make auf dem mac

 · 
Gepostet: 21.04.2010 - 23:04 Uhr  ·  #1
Hallo,

ich versuche zZ gwenhyfar als static lib auf dem Mac zu kompilieren. Grundlage sind sowohl die Version gwenhywfar-3.11.3 als auch gwenhywfar-3.11.7beta. Die Fehler sind jeweils identisch.

Ich habe folgende Variablen gesetzt:
Code
PREFIX="/Users/xxx/Downloads/gwenhywfar-3.11.7beta/build-i386" 
CFLAGS="-O -g -isysroot /Developer/SDKs/MacOSX10.5.sdk -I${PREFIX}/include" 
LDFLAGS="-L${PREFIX}/lib"

und danach
Code
./configure --disable-dependency-tracking --prefix=$PREFIX --disable-shared --enable-static --enable-local-install --disable-rpath --enable-binreloc --enable-binreloc-threads --with-libgcrypt-prefix=$PREFIX --with-libgnutls-prefix=$PREFIX --disable-variadic-macros

ausgeführt. Das läuft soweit scheinbar relativ problemlos.
Code
configure: WARNING: unrecognized options: --with-libgnutls-prefix

Summary
=============================================
Version                       : 3.11.7beta-0
System                        : osx
Installation Folder           : /Users/xxxx/Downloads/gwenhywfar-3.11.7beta/build-i386
Local Installation Mode       : yes
Plugin Installation Folder    : ${libdir}/gwenhywfar/plugins/47
Plugin Search Folder          : lib/gwenhywfar/plugins/47
Data Search Folder            : share/gwenhywfar
Locale Search Folder          : share/locale
Config Search Folder          : etc
Buffer Default Hard Limit     : (16*1024*1024)
Symbol Visibility             : yes, gcc-4.0.1
OpenSSL Support for gct-tool  : yes
GUI Support                   : fox16 qt3 qt4
GNUTLS                        : 1.6.1 or higher

Plugins
=============================================
  Crypt token plugins         : ohbci
  DBIO plugins                : csv olddb xmldb
  ConfigManager plugins       : dir

Wenn ich danach jedoch make ausführe, bekomme ich eine ziemlich lange Liste an Fehlern. Hier ein Auszug:

Code
gcc -DHAVE_CONFIG_H -DBUILDING_GWENHYWFAR -DGWEN_PREFIX_DIR="/Users/xxx/Downloads/gwenhywfar-3.11.7beta/build-i386" -DGWEN_SYSCONF_DIR="etc" -DLOCALEDIR="share/locale" -DLIBDIR="/Users/xxx/Downloads/gwenhywfar-3.11.7beta/build-i386/lib" -DGWENHYWFAR_SO_EFFECTIVE_STR="47" -DGWEN_DATADIR="share/gwenhywfar" -DPLUGINDIR="lib/gwenhywfar/plugins/47" -I. -I.. -I../gwenhywfar3 -I../src/base -I../src/crypt -I../src/io -I../src/os -I../src/ipc -I../src/net2 -I../src/parser     -g -O2 -Wall -Wall -c testlib.c
/bin/sh ../libtool --tag=CC   --mode=link gcc -fvisibility=hidden -g -O2 -Wall -Wall   -o testlib testlib.o libgwenhywfar.la 
libtool: link: gcc -fvisibility=hidden -g -O2 -Wall -Wall -o testlib testlib.o  ./.libs/libgwenhywfar.a -L/usr/local/lib /usr/local/lib/libgnutls.dylib -lz /usr/local/lib/libgcrypt.dylib /usr/local/lib/libgpg-error.dylib -L/sw/lib /usr/local/lib/libintl.dylib /usr/lib/libiconv.dylib -lc -framework CoreFoundation
Undefined symbols:
  "_GWEN_Buffer_InsertByte", referenced from:
      _GWEN_XMLNode_GetXPath in libgwenhywfar.a(xml.o)
  "_GWEN_Buffer_SetStep", referenced from:
      _GWEN_Path_HandleWithIdx in libgwenhywfar.a(path.o)
      _GWEN_Path_Handle in libgwenhywfar.a(path.o)
  "_GWEN_Buffer_Rewind", referenced from:
      _GWEN_Padd_PaddWithIso9796_2 in libgwenhywfar.a(padd.o)
      _GWEN_Padd_PaddWithPkcs1Bt1 in libgwenhywfar.a(padd.o)
      _GWEN_Padd_PaddWithPkcs1Bt2 in libgwenhywfar.a(padd.o)
      _GWEN_Io_LayerMemory_fromString in libgwenhywfar.a(io_memory.o)
  "_GWEN_Buffer_new", referenced from:
      _check1 in testlib.o
      _check1 in testlib.o
      _check2 in testlib.o
      _check2 in testlib.o
      _GWEN_Gui_CheckCertBuiltIn in libgwenhywfar.a(gui.o)
      _GWEN_Gui_CheckCertBuiltIn in libgwenhywfar.a(gui.o)
      _GWEN_Directory_GetPath in libgwenhywfar.a(directory_all.o)
      _GWEN_Directory_FindFileInPaths in libgwenhywfar.a(directory_all.o)
      _GWEN_Directory_FindPathForFile in libgwenhywfar.a(directory_all.o)
      _GWEN_Directory_GetFileEntriesWithType in libgwenhywfar.a(directory_all.o)
      _GWEN_Directory_GetFileEntries in libgwenhywfar.a(directory_all.o)
      _GWEN_Directory_GetDirEntries in libgwenhywfar.a(directory_all.o)
      _GWEN_PathManager_AddPath in libgwenhywfar.a(pathmanager.o)
      _GWEN_PathManager_AddRelPath in libgwenhywfar.a(pathmanager.o)
      _GWEN_PathManager_AddRelPath in libgwenhywfar.a(pathmanager.o)
      _GWEN_PathManager_AddRelPath in libgwenhywfar.a(pathmanager.o)
      _GWEN_PathManager_FindFile in libgwenhywfar.a(pathmanager.o)
      _GWEN_Gui_CGui_CheckCert in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_SetPasswordStatus in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_GetPassword in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_GetPassword in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_ShowBox in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_InputBox in libgwenhywfar.a(cgui.o)
      _GWEN_Gui_CGui_MessageBox in libgwenhywfar.a(cgui.o)
      _GWEN_DB_WriteGroupToIoLayer in libgwenhywfar.a(db.o)
      _GWEN_DB_WriteGroupToIoLayer in libgwenhywfar.a(db.o)
      _GWEN_DB__ReadValues in libgwenhywfar.a(db.o)
      _GWEN_DB__ReadValues in libgwenhywfar.a(db.o)
      _GWEN_DB_ReadFromFastBuffer in libgwenhywfar.a(db.o)
      _GWEN_DB_ReadFromFastBuffer in libgwenhywfar.a(db.o)
      _GWEN_ProgressData_new in libgwenhywfar.a(progressdata.o)
      _GWEN_DlgProgress_new in libgwenhywfar.a(dlg_progress.o)
      _GWEN_DlgProgress_new in libgwenhywfar.a(dlg_progress.o)
      _GWEN_DlgProgress_new in libgwenhywfar.a(dlg_progress.o)
      _GWEN_DlgProgress_AddLogText in libgwenhywfar.a(dlg_progress.o)
      _GWEN_Text_LogString in libgwenhywfar.a(text.o)
      _GWEN_Path_HandleWithIdx in libgwenhywfar.a(path.o)
      _GWEN_Path_HandleWithIdx in libgwenhywfar.a(path.o)
      _GWEN_Path_Handle in libgwenhywfar.a(path.o)
      _GWEN_Path_Handle in libgwenhywfar.a(path.o)
      _GWEN_DlgMessage_new in libgwenhywfar.a(dlg_message.o)
      _GWEN_Gui_CProgress_new in libgwenhywfar.a(cprogress.o)
      _GWEN_Gui_CProgress_Log in libgwenhywfar.a(cprogress.o)
      _GWEN_DlgInput_new in libgwenhywfar.a(dlg_input.o)
      _GWEN_Logger__Log in libgwenhywfar.a(logger.o)
      _GWEN_Logger_Log in libgwenhywfar.a(logger.o)
      _GWEN_DlgShowBox_new in libgwenhywfar.a(dlg_showbox.o)
      _GWEN_XMLNode_GetXPath in libgwenhywfar.a(xml.o)
      _GWEN_XML_AddNameSpace in libgwenhywfar.a(xml.o)
      _GWEN_XML_FindNameSpace in libgwenhywfar.a(xml.o)
      _GWEN_XMLNode__CheckNameSpaceDecls1 in libgwenhywfar.a(xml.o)
      _GWEN_XMLNode__CheckAndSetNameSpace in libgwenhywfar.a(xml.o)
      _GWEN_XML_ReadFromFastBuffer in libgwenhywfar.a(xml.o)
      _GWEN_XML_ReadFromFastBuffer in libgwenhywfar.a(xml.o)
      _GWEN_XML_ReadFromFastBuffer in libgwenhywfar.a(xml.o)
      _GWEN_XML_ReadFromFastBuffer in libgwenhywfar.a(xml.o)
      _GWEN_XML_ReadFromFastBuffer in libgwenhywfar.a(xml.o)
      _GWEN_DBIO_ModuleInit in libgwenhywfar.a(dbio.o)
      _GWEN_FSLock_new in libgwenhywfar.a(fslock.o)
      _GWEN_Io_LayerMemory_fromString in libgwenhywfar.a(io_memory.o)
      _GWEN_XmlCtxStore_AddData in libgwenhywfar.a(xmlctx.o)
      _GWEN_XmlCtxStore_AddAttr in libgwenhywfar.a(xmlctx.o)
      _GWEN_PluginManager_LoadPlugin in libgwenhywfar.a(plugin.o)
      _GWEN_PluginManager_LoadPlugin in libgwenhywfar.a(plugin.o)
      _GWEN_PluginManager_LoadPluginFile in libgwenhywfar.a(plugin.o)
      _GWEN_LibLoader_OpenLibraryWithPath in libgwenhywfar.a(libloader.o)
      _GWEN_LoadPluginDescrsByType in libgwenhywfar.a(plugindescr.o)
...
  "_GWEN_Buffer_AllocRoom", referenced from:
      _GWEN_Text_UnescapeXmlToBuffer in libgwenhywfar.a(text.o)
      _GWEN_Text_UnescapeXmlToBuffer in libgwenhywfar.a(text.o)
      _GWEN_Text_UnescapeXmlToBuffer in libgwenhywfar.a(text.o)
      _GWEN_Path_AppendPathElement in libgwenhywfar.a(path.o)
      _GWEN_Io_Layer_ReadPacketToBuffer in libgwenhywfar.a(iolayer.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
make[4]: *** [testlib] Error 1
make[3]: *** [all-recursive] Error 1
make[2]: *** [all] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2


Kann mir jemand einen Lösungsvorschlag machen?

Den Hinweis zu den configure-Parametern habe ich den Quellen des hbcitool von dem wohl etwas ungeliebten Saldomat entnommen. Ich will es jedoch nicht dafür sondern für Pecunia verwenden.
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Hamburg
Homepage: aqbanking.de/
Beiträge: 642
Dabei seit: 03 / 2005
Betreff:

Re: gwenhyfar - configure & make auf dem mac

 · 
Gepostet: 25.04.2010 - 00:16 Uhr  ·  #2
Moin,

ich empfehle immer, hier nicht statisch zu linken, denn die Plugins muessten dann ja auch statisch gegen libgwenhywfar linken, und da beisst sich dann die Katze in den Schwanz. Ich habe das zu Anfang mit AqBanking-CLI auch so gemacht, aber statisches Linken ist heutzutage einfach anachronistisch, und darum linke ich nur noch dynamisch.

In aktuellen Versionen der AqBanking-Familie ist eigentlich alles drin, was man benoetigt, um verschiebbare Versionen aller beteiligten Projekte zu erzeugen.

Wenn Du das "--enable-static" und "--disable-shared" jeweils invertierst und dabei die anderen Argumente drin laesst, werden dynamische Bibliotheken gebaut, die verschiebbar sind. Gemeint ist damit: Das resultierende Ergebnis verwendet bei der Ausfuehrung den Pfad des aufgerufenen Binaries um seine Position im Dateisystem zu finden. Von dieser Position ausgehend werden dann alle Daten (bis auf die Einstellungen) gesucht, und zwar sowohl Daten als auch Plugins.

Wenn Du das Ergebnis dann also beispielsweise (ich kenne die MacOSX-Pfade nicht, daher nehme ich Linux-Beispiel) nach /opt/aqbanking installierst, suchen AqBanking und die anderen Projekte ihre Daten und Plugins unterhalb von /opt/aqbanking.

Wenn Du dann irgendwann das Verzeichnis /opt/aqbanking irgendwoanders hin verschiebst, werden die Daten eben dort gesucht (also immer relativ zum aufgerufenen Executable).

Das funktioniert unter Linux und Windows ausgezeichnet (siehe aktuelle Release von AqFinance).

Man muss dabei nur bedenken, dass man die Anwendung - z.B. bei mir AqFinance - nicht direkt aufrufen darf, sondern stattdessen ein kleines Script verwenden muss, welches nichts anderes tut als "LD_LIBRARY_PATH" zu setzen und das Binary aufzurufen, damit auch der Linker weiss, wo er die Bibliotheken finden kann.

Ich weiss aus dem Kopf nicht, wie diese Umgebungsvariable auf dem Mac heisst, ich habe aber gesehen, dass es da auch soetwas gibt.

Fazit: Statisches bauen der Bibliotheken wird nicht direkt unterstuetzt, weil es nicht noetig ist, denn das dynamische Linken macht deutlich weniger Probleme.


Gruss
Martin
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Hamburg
Homepage: aqbanking.de/
Beiträge: 642
Dabei seit: 03 / 2005
Betreff:

Re: gwenhyfar - configure & make auf dem mac

 · 
Gepostet: 02.05.2010 - 16:31 Uhr  ·  #3
Moin,

bist Du damit klargekommen?


Gruss
Martin
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 13
Dabei seit: 02 / 2010
Betreff:

Re: gwenhyfar - configure & make auf dem mac

 · 
Gepostet: 20.05.2010 - 00:40 Uhr  ·  #4
Ja, aber leider erfolglos. Die Fehlermeldungen blieben relativ ähnlich. Werde mich bei Gelegenheit nochmal dahinter klemmen. Aber danke schon mal für die Hilfe.
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Hamburg
Homepage: aqbanking.de/
Beiträge: 642
Dabei seit: 03 / 2005
Betreff:

Re: gwenhyfar - configure & make auf dem mac

 · 
Gepostet: 20.05.2010 - 23:46 Uhr  ·  #5
Zitat geschrieben von GrünerApfel
Ja, aber leider erfolglos. Die Fehlermeldungen blieben relativ ähnlich. Werde mich bei Gelegenheit nochmal dahinter klemmen. Aber danke schon mal für die Hilfe.


Was sind denn genau die Fehlermeldungen?

BTW: Inzwischen habe ich auch einen Mac zur Verfuegung, und ich habe auch schon beispielsweise AqFinance auf dem Mac gebaut (inclusive relozierbarer Versionen der Bibliotheken der AqBanking-Familie, incl. Gwen).

Im Rahmen dessen habe ich auch ein paar kleinere Bugs behoben, so dass Gwen jetzt kompiliert, wenn die Abhaengigkeiten installiert sind.

Fuer AqFinance beispielsweise liefere ich die Abhaengigkeiten gleich mit (so lief das bisher bei der Linux- und Windows-Version auch schon).

Aber prinzipiell koennte man natuerlich auch die Abhaengigkeiten aus den MacPorts verwenden (fuer AqFinance wollte ich vermeiden, dass der User die MacPorts installieren muss, daher liefere ich die noetigen Abhaengigkeiten hier mit).

Die Umgebungsvariable, von der ich in meinem vorigen Beitrag geschrieben hatte, lautet uebrigens
"DYLD_FALLBACK_LIBRARY_PATH", ich habe aber inzwischen im Internet gefunden, dass man mit einem Tool namens "install_name_tool" wohl auch die Pfade zu den Bibliotheken relativ zum Exe-Pfad setzen kann.

Damit koennte man dann beispielsweise ein *.app-Paket machen, wo die Libs dann z.B. im Frameworks-Unterverzeichnis des Paketes liegen wuerden. Aber das muss ich mir noch genauer ansehen. Man wuerde sich dann aber den Umweg ueber ein Exe-Script und die besagte Umgebungsvariable sparen...

Zukuenftig wird jedenfalls MacOSX von mir weitgehend direkt unterstuetzt.


Gruss
Martin
Gewählte Zitate für Mehrfachzitierung:   0