Gast LinTec Geschrieben September 13, 2013 at 07:23 Geschrieben September 13, 2013 at 07:23 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 | ; 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) Zitieren
photron Geschrieben September 13, 2013 at 11:54 Geschrieben September 13, 2013 at 11:54 Es sieht so aus als ob du bricklet_industrial_quad_relay.c und ip_connection.c nicht mitkompilieren würdest. Daher dann auch die Undefined Symbol Fehler. Zitieren
Gast LinTec Geschrieben September 15, 2013 at 15:29 Geschrieben September 15, 2013 at 15:29 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 Zitieren
photron Geschrieben September 16, 2013 at 08:08 Geschrieben September 16, 2013 at 08:08 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); Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.