Jump to content

C/C++ Bindings in XCODE Problem


Guest LinTec
 Share

Recommended Posts

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)

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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);

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...