ARMv5上的libsodium段故障

时间:2015-12-11 18:06:24

标签: c arm libsodium

我可以在Ubuntu中使用libsodium 1.0.7,但在尝试将libsodium库交叉编译为armv5架构(armv5tejl-unknown-linux-gnueabihf)时似乎存在一些问题。 我使用了./configure --host=armv5tejl-unknown-linux-gnueabihf,然后是make DESTDIR=/home/myself/ARM/

所有文件都生成正常(标题和静态和共享库文件),我可以编译和链接一个小的测试C程序,然后在我的ARMv5目标上执行时会产生分段错误(工具链,一切都很好,我编译的所有其他内容以及不使用libsodium的链接在我的ARM机器上运行得非常好):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sodium.h"
int main()
{
  printf("sodium_init()=%d\n",sodium_init()); // Fine, = 0
  unsigned char pbk[crypto_box_PUBLICKEYBYTES];
  unsigned char sbk[crypto_box_SECRETKEYBYTES];
  crypto_box_keypair(pbk,sbk); // <-- Segmentation fault.
}

我还在https://download.libsodium.org/doc/installation/index.html尝试了针对ARM指令的官方交叉编译,但由于缺少nosys.specs文件,配置失败。有什么地方我可以下载这个(我已经搞砸了它,它似乎必须专门为libsodium包生成)?

1 个答案:

答案 0 :(得分:0)

我设法在这里帮助解决了这个问题:github.com/jedisct1/libsodium/issues/331                      - 提亚斯

  

是的,我终于设法让它在我的ARMv5目标上运行了   以下,非常感谢您指点我的ARM工具链   包含了nosys.spec&amp; libnosys.a文件:

注意:这是用于制作静态的   libsodium.a

以下示例假设主文件夹=   /home/user

tar xvjf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
tar xvzf libsodium-1.0.7.tar.gz
cp ./gcc-arm-none-eabi-4_9-2015q3/arm-none-eabi/lib/nosys.spec ./libsodium-1.0.7/
cp ./gcc-arm-none-eabi-4_9-2015q3/arm-none-eabi/lib/libnosys.a ./libsodium-1.0.7/ 

文件夹gcc-arm-none-eabi-4_9-can   此时将被删除。

cd ./libsodium-1.0.7/
mkdir ARMv5
export LDFLAGS='-static -g --specs=nosys.specs -L/home/user/libsodium-1.0.7/ -lnosys -lc'
./configure --host=armv5tejl-unknown-linux-gnueabihf --enable-static --prefix=/home/user/libsodium-1.0.7/ARMv5/
make DESTDIR=/home/user/libsodium-1.0.7/ARMv5/ 

密钥   发现给我:

  • 提示从jedisct1获取的地方   ARM工具链包含nosys.spec和。{   libnosys.a个文件。
  • 找到添加链接器标志   -lc用libc制作libsodium(继承   __libc_start_mainabort,   __libc_csu_fini__libc_csu_init
  •