Jump to content

Recommended Posts

Geschrieben

Hallo zusammen,

 

ich habe ein Problem, eine C++ Anwendung in Xcode zu kompilieren. Ich habe als xcode Project eine Command Line Tool ausgewählt und die Tinkerforge Bindings eingebunden. Wenn ich das Programm dann ausführen möchte erhalte ich eine Fehlermeldung: ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

Ich habe schon Google gefragt und keine Lösung gefunden. Ich habe bereits den Compiler auf libstdc++ umgestellt und in der Build Phase Link Binar die libstdc++ eingefügt ohne Erfolg. Vielleicht könnt ihr mir helfen.

 

Programm

//

//  main.cpp

//  QuadRelay_V2

//

//  Copyright © 2013. All rights reserved.

//

 

#include <iostream>

 

#include "ip_connection.h"

#include "bricklet_industrial_quad_relay.h"

 

#define HOST "localhost"

#define PORT "4223"

#define UID "xxx"

 

int main()

{

    IPConnection ipcon;

    ipcon_create(&ipcon);

   

    IndustrialQuadRelay iqr;

    industrial_quad_relay_create(&iqr, UID, &ipcon);

   

    if (ipcon_connect(&ipcon, "localhost", 4223) < 0)

    {

fprintf(stderr, "Could not connect\n");

exit(1);

}

    // Don't use device before ipcon is connected

   

// Turn relay 0, 3 on and relay 1, 2 off.

industrial_quad_relay_set_value(&iqr, 1 | 8);

   

printf("Press key to exit\n");

getchar();

ipcon_destroy(&ipcon); // Calls ipcon_disconnect internally

}

 

Output:

 

 

Ld /Users/aschaath/Library/Developer/Xcode/DerivedData/DualRelay-ecmimmininxesjhazubqxjokunyc/Build/Products/Debug/DualRelay normal x86_64

    cd /Users/aschaath/Entwicklung/Projekte/C++/DualRelay

    setenv MACOSX_DEPLOYMENT_TARGET 10.8

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk -L/Users/aschaath/Library/Developer/Xcode/DerivedData/DualRelay-ecmimmininxesjhazubqxjokunyc/Build/Products/Debug -F/Users/aschaath/Library/Developer/Xcode/DerivedData/DualRelay-ecmimmininxesjhazubqxjokunyc/Build/Products/Debug -filelist /Users/aschaath/Library/Developer/Xcode/DerivedData/DualRelay-ecmimmininxesjhazubqxjokunyc/Build/Intermediates/DualRelay.build/Debug/DualRelay.build/Objects-normal/x86_64/DualRelay.LinkFileList -mmacosx-version-min=10.8 -stdlib=libc++ -o /Users/aschaath/Library/Developer/Xcode/DerivedData/DualRelay-ecmimmininxesjhazubqxjokunyc/Build/Products/Debug/DualRelay

 

Undefined symbols for architecture x86_64:

  "ipcon_create(_IPConnection*)", referenced from:

      _main in main.o

  "ipcon_connect(_IPConnection*, char const*, unsigned short)", referenced from:

      _main in main.o

  "ipcon_destroy(_IPConnection*)", referenced from:

      _main in main.o

  "industrial_quad_relay_create(_Device*, char const*, _IPConnection*)", referenced from:

      _main in main.o

  "industrial_quad_relay_set_value(_Device*, unsigned short)", referenced from:

      _main in main.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

 

Geschrieben

Hi,

 

danke dir für den Tipp! Ich bin jetzt auf C umgestiegen und da läuft alles.

 

Es gibt ein neues Problem, was ich nicht verstehe.

 

Ich möchte den Wert von ndustrial_quad_relay_set_value(&iqr, 0); auslesen und in einer Variablen speichern, um diesen Wert für eine IF Anweisung zu verwenden.

    int state = 0;

    state = industrial_quad_relay_get_value(&iqr, 0);

    printf("%d", state);

 

Nun lautet das Ergebnis jedesmal -1. Egal ob BOOL; INT; oder CHAR. Sollte der Wert nicht 1 sein, wenn set_value = 1 ist und 0 sein, wenn set_value = 0 ist?

 

Wäre super, wenn mir jemand helfen könnte.

 

Gruß,

LinTec

Geschrieben

Alle Funktionen der C/C++ Bindings geben einen int zurück. Dies ist ein Fehlercode, nicht der aktuelle Zustand des Quad Relays. Siehe

 

http://www.tinkerforge.com/de/doc/Software/Bricklets/IndustrialQuadRelay_Bricklet_C.html#api

 

Getter geben Werte in Variablen zurück. Du übergibst industrial_quad_relay_get_value einen Pointer auf ein uint16_t Variable und dahin schreibt die Funktion dann den aktuellen Zustand des Quad Relays:

 

uint16_t value = 0;
industrial_quad_relay_get_value(&iqr, &value);
printf("%u", value);

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...