1

armv5tejl-unknown-linux-gnueabihf我可以在 Ubuntu 中很好地使用 libsodium 1.0.7,但是在尝试将 libsodium 库交叉编译为 armv5 架构( )时似乎存在一些问题。我用过./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 包生成的)?

4

1 回答 1

0

我设法在这里得到了一些帮助:github.com/jedisct1/libsodium/issues/331 – Tias

是的,我终于设法通过执行以下操作使其在我的 ARMv5 目标上运行,非常感谢您将我指向包含 nosys.spec 和 libnosys.a 文件的 ARM 工具链:

注意:这是为了制作静态 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-。

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 提示从何处获取包含nosys.speclibnosys.a文件的 ARM 工具链。
  • 发现添加链接器标志 -lc以使用 libc 制作 libsodium( 包含__libc_start_mainabort和 )__libc_csu_fini__libc_csu_init

于 2017-10-11T08:24:15.357 回答