1

我正在尝试使用 Qualcomm Hexagon 工具链为 Hexagon 目标构建/交叉编译一些 C 代码。我使用argtable3。我的应用程序中需要用于命令行解析的库。

该版本为 argtable3 库和 Hexagon 工具链 libc.a 中存在的某些函数提供了多个定义链接器错误。下面给出的错误。

我该如何解决这个问题,因为我不能删除 argtable,也不能删除 libc.a 的链接作为我的目标架构,删除它可能会引发其他错误。

错误:文件../../lib/libargtable.a (argtable3.co) 和 /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/中的符号“ getopt ”的多重定义v60/ libc.a (getopt.o)

错误:文件../../lib/libargtable.a (argtable3.co) 和 /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/中的符号“ opterr ”的多重定义v60/ libc.a (getopt.o)

错误:文件../../lib/libargtable.a (argtable3.co) 和 /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/中的符号 ` optind ' 的多重定义v60/ libc.a (getopt.o)

错误:在文件../../lib/libargtable.a (argtable3.co) 和 /home/HEXAGON_Tools/7.2.12/Tools/bin/../target/hexagon/lib/中有多个符号“ optopt ”定义v60/ libc.a (getopt.o)

4

2 回答 2

2

以防万一您仍然遇到此问题,请注意检查您的编译器命令是什么?我认为最好的方法是在 argtable3.c 代码中修改这些区域,例如:

#ifdef REPLACE_GETOPT
/*
 * getopt --
 *  Parse argc/argv argument vector.
 *
 * [eventually this will replace the BSD getopt]
 */
int
getopt(int nargc, char * const *nargv, const char *options)
{

类似情况出现在: https ://github.com/argtable/argtable3/blob/master/argtable3.c

于 2016-10-15T16:19:49.697 回答
0

如果您在本地启用_WIN32、定义optreset并将调用更改_vsnprintf()vsnprintf()in warnx(),它应该可以工作。

示例工作提交,使用截至 2017 年 5 月的当前 Hexagon SDK 进行测试。

于 2017-05-12T15:51:03.353 回答