我可以在Ubuntu中很好地使用libnadi1.0.7,但是在尝试将libnadium库交叉编译为armv5架构时似乎有一些问题(armv5tejl-unknown-linux-gnueabihf
)。
我使用了./configure --host=armv5tejl-unknown-linux-gnueabihf
然后make DESTDIR=/home/myself/ARM/
。
所有文件都生成得很好(头文件和静态和共享库文件),我可以编译并链接一个小的测试C程序,然后当它在我的ARMv5目标上执行时,它会生成一个分段错误(toolchain和All都很好,我编译和链接的其他所有不使用lib钠的文件在我的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
文件,configure失败。有什么地方我可以下载这个(我已经看了它,似乎它必须是专门为lib钠包生成的)? 最佳答案
我在这里设法解决了这个问题:github.com/jedisct1/libsodium/issues/331
–蒂亚斯
是的,我终于成功地在我的ARMv5目标上运行了
下面,非常感谢你把我指给手臂工具链
包含nosys.spec和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/
键对我的发现:绝地1号的提示
包含
nosys.spec
和libnosys.a
文件。发现要添加链接器标志-lc
用溴化锂制备溴化锂钠(续__libc_start_main
,abort
,__libc_csu_fini
和__libc_csu_init
)关于c - ARMv5上的libsodium段故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34229830/