代码之家  ›  专栏  ›  技术社区  ›  Jon

ARM Cortex-m3的llsr和llsl(64位移位)

  •  4
  • Jon  · 技术社区  · 11 年前

    我正在尝试交叉编译一些代码(tweetnacl)来武装无eabi(裸金属cortex-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

    1 回复  |  直到 11 年前
        1
  •  1
  •   auselen    11 年前

    看见 4.2 The long long helper functions 属于 Run-time ABI for the ARM 描述它们是什么以及它们是如何定义的。

    这些帮助函数是由编译器(而非标准库)提供的,在您的情况下,调用编译器时参数错误,或者安装未完成(路径错误、文件丢失等)