我试图将一些代码(tweetnacl)交叉编译为arm-none-eabi(裸机皮质-m3)
它具有64位旋转功能:
static u64 R(u64 x,int c) { return (x >> c) | (x << (64 - c)); }
链接器抱怨它无法找到执行64位左移和右移的例程:
tweetnacl.c:487: undefined reference to `__aeabi_llsr'
tweetnacl.c:487: undefined reference to `__aeabi_llsl'
我无法找到有关这些例程的更多信息。 auselen提供了对定义这些函数的正确文档的引用。我正在使用的工具链版本:
arm-none-eabi-gcc (Sourcery G++ Lite 2010q1-188) 4.4.1
此工具链中是否存在实施?哪些可能的标志可能导致构建过程排除任何编译器提供的实现?
解决方案:结果我需要链接到libgcc.a
答案 0 :(得分:1)
请参阅Run-time ABI for the ARM的4.2 The long long helper functions
,了解它们的含义以及定义方式。
这些辅助函数由编译器(非标准库)提供,在您调用编译器或安装不完整(错误的路径,缺少文件等)时,您的情况看起来很像< / p>