我正在尝试使用Qualcomm Hexagon工具链为Hexagon目标构建/交叉编译一些C代码。我使用argtable3。我的应用程序中需要的命令行解析库。
构建为argtable3库和Hexagon工具链libc.a中存在的某些函数提供了多个定义链接器错误。下面给出的错误。
我如何解决这个问题,因为我无法删除argtable,也没有删除libc.a的链接作为我的目标体系结构,并且删除它可能会引发其他错误。
错误:文件中的符号“ getopt ”的多个定义../../lib/libargtable.a(argtable3.c.o)和 /home/HEXAGON_Tools/7.2.12/Tools/bin /../目标/六边形/ LIB / V60 /的的libc.a (getopt.o)
错误:文件中的符号“ opterr ”的多个定义../../lib/libargtable.a(argtable3.co)和/ home / HEXAGON_Tools / 7.2.12 /工具/仓/../目标/六边形/ LIB / V60 /的的libc.a (getopt.o)
错误:文件中的符号“ optind ”的多个定义../../lib/libargtable.a(argtable3.co)和/ home / HEXAGON_Tools / 7.2.12 /工具/仓/../目标/六边形/ LIB / V60 /的的libc.a (getopt.o)
错误:文件中的符号“ optopt ”的多重定义../../lib/libargtable.a(argtable3.co)和/ home / HEXAGON_Tools / 7.2.12 / Tools / bin /../ target / hexagon / lib / v60 / libc.a (getopt.o)
答案 0 :(得分:2)
万一你仍然遇到这个问题,请注意检查你的编译器命令是什么?我认为最好的方法是在argtable3.c代码中修改这些区域,如:
/ * * getopt - *解析argc / argv参数向量。 * * [最终这将取代BSD getopt] * / INT getopt(int nargc,char * const * nargv,const char * options) {
类似的出现: https://github.com/argtable/argtable3/blob/master/argtable3.c
答案 1 :(得分:0)
如果您启用_WIN32
,请在本地定义optreset
,并将_vsnprintf()
的号召更改为vsnprintf()
中的warnx()
,它应该有效。
Example working commit,使用截至2017年5月的当前Hexagon SDK进行测试。