2016-08-30 6 views
1

Ich versuche zu kompilieren einige C-Code mit Qualcomm Hexagon Toolchain für Hexagon Ziel. Ich benutze argtable3. Bibliothek für das Kommandozeilen-Parsing benötigt in meiner Anwendung.Mehrere Definition Linker Fehler mit Hexagon DSP Toolchain

Der Build gibt mehrere Definition Linker-Fehler für bestimmte Funktionen, die in der Bibliothek argtable3 und auch die Hexagon Toolchain libc.a vorhanden sind. Fehler unten angegeben.

Wie kann ich dieses Problem umgehen, wie ich arggtable nicht entfernen kann, und entfernen Sie weder die Verknüpfung von libc.a als das ist meine Zielarchitektur, und das Entfernen kann zu anderen Fehlern führen.

Fehler: mehrere Definition des Symbols `getopt 'in Datei ../../lib/ libargtable.a (argtable3.co) und /home/HEXAGON_Tools/7.2.12/Tools/bin/ ../target/hexagon/lib/v60/ libc.a (getopt.o)

Fehler: mehrere Definition des Symbols `opterr 'in Datei ../../lib/ libargtable.a (argtable3.co) und /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/v60/ libc.a (getopt.o

)

Fehler: mehrere Definition des Symbols `optind 'in Datei ../../lib/ libargtable.a (argtable3.co) und /home/HEXAGON_Tools/7.2.12/Tools/bin/ ../target/hexagon/lib/v60/ libc.a (getopt.o)

Fehler: mehrere Definition des Symbols `optopt 'in Datei ../../lib/ libargtable.a (argtable3.co) und /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/v60/ libc.a (getopt.o)

Antwort

2

Nur für den Fall, dass Sie immer noch in diesem Problem stecken, sollten Sie sich Gedanken machen, was Ihr Compilerbefehl ist? Ich denke, der beste Weg, diese Bereiche in Ihrem argtable3.c Code zu ändern, ist wie:

ifdef REPLACE_GETOPT

/* * getopt - * Parse argc/argv Argument Vektor. * * [schließlich diese ersetzen die BSD getopt] */ int getopt (int NARGC, char * const * nargv, const char * Optionen) {

ähnliche Vorkommen in: https://github.com/argtable/argtable3/blob/master/argtable3.c

+0

Ich hatte den Quellcode in argtable3 zu ändern, um die Symbole zu verursachen Linker Fehler zu benennen. – goldenmean

0

Wenn Sie _WIN32 aktivieren, lokal optreset definieren und den Aufruf von _vsnprintf() zu vsnprintf() in warnx() ändern, sollte es funktionieren.

Example working commit, mit dem aktuellen Hexagon SDK als 2017. getestet Mai