Hallo Felix,
für die angezeigten fehlermeldungen gibt es zwei mögliche Ursachen:
1.
Du hast vergessen beim kompilieren das programm mit der libiowkit.so zu
linken. Richtig wäre ein Aufruf wie dieser hier:
Code: Select all
gcc -Wall -g -liowkit iowkittest.c -o iowkittest
Damit der Linker (Parameter -liowkit) die library (libiowkit.so) auch finden
kann, muss diese Datei allerdings in einem der Verzeichnisse stehen, die der Linker
automatisch durchsucht. Üblicherweise wären dass wohl:
/usr/lib oder
/usr/local/lib
Damit die obige Aufruf von
gcc erfolgreich ist wäre also (als root!) folgendes zu
tun
Code: Select all
cd InDasVerzeichnisWo-libiowkit.so-Ist
#die libiowkit in eines der Verzeichnisse kopieren die der Linker durchsucht
cp libiowkit.so /usr/local/lib
#der nächste befehl, beschleunigt den programmstart für anwendungen
#die dynamisch mit libiowkit.so gelinkt wurden
ldconfig
2.
Es hat schon ein Problem beim Erzeugen der libiowkit.so gegeben, das dazu
geführt hat, dass die als fehlend angezeigten Funktionen nicht in die lib
aufgenommen worden sind. Das kannst du allerding leicht mit dem Programm
nm nachprüfen:
Code: Select all
#Ein Aufruf von nm
nm libiowkit.so
#Sollte etwa folgendes ausgeben
# erstmal alles mögliche an internen Sachen ...
00001200 t call_gmon_start
U close@@GLIBC_2.0
# aber irgendwann sollte auch etwas wie das hier erscheinen !
00003200 b IoWarriors
000012e8 t IowiClear
000013c8 t IowiGetDeviceByHandle
00001fa8 T IowKitCancelIo
0000195d T IowKitCloseDevice
00001828 T IowKitGetDeviceHandle
00001811 T IowKitGetNumDevs
000018f5 T IowKitGetProductId
00001929 T IowKitGetRevision
00001877 T IowKitGetSerialNumber
00001fb2 T IowKitGetThreadHandle
0000143b T IowKitOpenDevice
00001afd T IowKitRead
00001d42 T IowKitReadImmediate
00001ad6 T IowKitSetLegacyOpenMode
0000199e T IowKitSetTimeout
00001a3a T IowKitSetWriteTimeout
00001fbc T IowKitVersion
00001eb2 T IowKitWrite
000024e4 T Java_com_codemercs_iow_IowKit_cancelIo
00001ff8 T Java_com_codemercs_iow_IowKit_closeDevice
00002336 T Java_com_codemercs_iow_IowKit_getDeviceHandle
00002312 T Java_com_codemercs_iow_IowKit_getNumDevs
0000236e T Java_com_codemercs_iow_IowKit_getProductId
000023a6 T Java_com_codemercs_iow_IowKit_getRevision
000023de T Java_com_codemercs_iow_IowKit_getSerialNumber
0000255c T Java_com_codemercs_iow_IowKit_getThreadHandle
00001fd4 T Java_com_codemercs_iow_IowKit_openDevice
00002114 T Java_com_codemercs_iow_IowKit_read
00002256 T Java_com_codemercs_iow_IowKit_readImmediate
00002458 T Java_com_codemercs_iow_IowKit_setTimeout
0000249e T Java_com_codemercs_iow_IowKit_setWriteTimeout
0000252a T Java_com_codemercs_iow_IowKit_version
0000202a T Java_com_codemercs_iow_IowKit_write
# usw...
Wichtig ist, dass vor den Funktionen der IowKit.lib der Buchstabe
T
angezeigt wird! Das
T bedeutet, dass die Funktion in der lib auch
tatsächlich definiert ist.
Sollte statt dessen ein
U vor den entsprechenden Funktionen stehen,
sind die Definitionen nicht in die libiowkit.so aufgenommen worden. Dies
könnte aber eigentlich nur dann passiert sein, wenn Du versucht hast die Lib
neu zu erzeugen. In der libiowkit.so, die von Codemercs mitgeliefert wird,
sind alle notwendigen Funktionen direkt definiert.
Aber ich denke mal Du hast eher das Problem Nummer
1.
Versuchs zuerst mal mit der oben beschriebenen Vorgehenweise (Lib installieren, dann
test kompilieren), und falls das nicht hilft, meld dich noch mal!
Grüße Eberhard