我可以在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包生成)?
答案 0 :(得分:0)
我设法在这里帮助解决了这个问题:github.com/jedisct1/libsodium/issues/331 - 提亚斯
是的,我终于设法让它在我的ARMv5目标上运行了 以下,非常感谢您指点我的ARM工具链 包含了nosys.spec&amp; libnosys.a文件:
- 下载ARM工具链 来自
gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
https://launchpad.net/gcc-arm-embedded- 从https://download.libsodium.org/libsodium/releases/
下载libsodium-1.0.7
注意:这是用于制作静态的
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_main
,abort
,__libc_csu_fini
和__libc_csu_init
)