我可以在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_mainabort
__libc_csu_fini__libc_csu_init

关于c - ARMv5上的libsodium段故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34229830/

10-14 09:09