Simples C/C++ Programm, Nutzung einer lib funktioniert nicht.



  • Ich verzweifele langsam an folgendem simplen Programm:

    /*
    *main.c
    *
    */
    
    #include <k8055.h>
    
    #define false 0
    #define true 1
    
    int i,j;
    
    int main (void){
       i=OpenDevice(0) //initialisiert Vellemann k8055 board-id 0
       j=0;
         while(true){
             WriteAllDigital(j);
             j++;
             if (j=3){
                 j=0;
                }
         }
    }
    

    der Inhalt des header Files:

    /* $Id: k8055.h,v 1.4 2008/05/21 20:25:51 mr_brain Exp $
    This file is part of the libk8055 Library.
    The libk8055 Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
    The libk8055 Library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    Lesser General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the
    Free Software Foundation, Inc.,
    59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
    http://opensource.org/licenses/
    */
    #ifdef __cplusplus
    extern "C" {
    #endif
    /* prototypes */
    int OpenDevice(long board_address);
    int CloseDevice();
    long ReadAnalogChannel(long Channelno);
    int ReadAllAnalog(long* data1, long* data2);
    int OutputAnalogChannel(long channel, long data);
    int OutputAllAnalog(long data1,long data2);
    int ClearAllAnalog();
    int ClearAnalogChannel(long channel);
    int SetAnalogChannel(long channel);
    int SetAllAnalog();
    int WriteAllDigital(long data);
    int ClearDigitalChannel(long channel);
    int ClearAllDigital();
    int SetDigitalChannel(long channel);
    int SetAllDigital();
    int ReadDigitalChannel(long channel);
    long ReadAllDigital();
    int ResetCounter(long counternr);
    long ReadCounter(long counterno);
    int SetCounterDebounceTime(long counterno, long debouncetime);
    int ReadAllValues (long int *data1, long int *data2, long int *data3, long int *data4, long int *data5);
    int SetAllValues(int digitaldata, int addata1, int addata2);
    long SetCurrentDevice(long deviceno);
    long SearchDevices(void);
    char *Version(void);
    #ifdef __cplusplus
    }
    #endif
    

    die k8055.h liegt in /usr/local/include
    die libk8055.so liegt in /usr/local/lib
    es gibt eine /etc/ld.so.conf.d/k8055.conf mit dem inhalt /usr/local/lib

    laut dem Ersteller der lib (http://libk8055.sourceforge.net/)kann man diese einfach so nutzen:

    gcc -Wall -lk8055 main.c

    mache ich das, erhalte ich als Fehlermeldung:
    Nicht definierter Verweis auf 'OpenDevice'
    Nicht definierter Verweis auf 'WriteAllDigital'

    Das der lib beigefügte Testprogramm funktioniert und bringt auch beim make keine Fehler. Ich habe zum Test auch mal alle includes des originalen Testprogramms in mein kleines Programm eingefügt, funktioniert auch nicht.
    So langsam bin ich am Ende meiner Weisheit.

    Normalerweise müsste der Code, an dem ja nicht viel dran ist, doch so funktionieren oder übersehe ich da etwas?

    Gruß René



  • hmmm hat sich erledigt

    warum auch immer man alles mit angeben muss

    gcc -Wall main.c -lk8055 -lusb -lm -o main
    

    führte zum Erfolg



  • Das ist kein C/C++-Programm. Das Programm ist in C geschrieben und nicht in Perl/Pyton oder Java/Ruby oder einer anderen Kombination von 2 Programmiersprachen 😡 .



  • tntnet schrieb:

    Pyton

    Diese Programmiersprache kenne ich gar nicht.


Log in to reply