C-无法静态链接到Ubuntu上的OpenSSL

C-无法静态链接到Ubuntu上的OpenSSL,c,ubuntu,openssl,arm,cross-compiling,C,Ubuntu,Openssl,Arm,Cross Compiling,按照给出的说明,我从Ubuntu v12.10(32位)下载了最新版本的OpenSSL(OpenSSL-1.0.1e.tar.gz) 我在Eclipse CDT(v1.2.0.2012170456)中有一个C项目,它静态链接到以下两个.a文件: home/usr/local/ssl/lib/libcrypto.a home/usr/local/ssl/lib/libssl.a 但是,当我构建项目时,会出现以下错误: /home/tashimaya/Applications/CodeSourc

按照给出的说明,我从Ubuntu v12.10(32位)下载了最新版本的OpenSSL(OpenSSL-1.0.1e.tar.gz)

我在Eclipse CDT(v1.2.0.2012170456)中有一个C项目,它静态链接到以下两个.a文件:

  • home/usr/local/ssl/lib/libcrypto.a
  • home/usr/local/ssl/lib/libssl.a
但是,当我构建项目时,会出现以下错误:

/home/tashimaya/Applications/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/ssl/lib/libssl.a when searching for -lssl
/home/tashimaya/Applications/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find –lssl
我的工具链是CodeSourcery(Sourcery G++Lite 2010q1-202),用于32位操作系统

我做错了什么

我正在使用的编译器命令行:

arm-none-linux-gnueabi-gcc -I"/path to my/include" -O0 -g3 -Wall -c -fmessage-length=0 -v -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c"

它说/usr/local/ssl/lib/libssl.a的大小不是预期的大小。尝试对其执行文件以检查您是以32位还是64位版本编译它。并检查您如何编译自己的程序。如果两者都匹配,链接器(ld)将链接它

如果您将程序编译为64位,并将其与32位的libssl.a链接,则此操作将不起作用

例如:

归档

/* kind ofoutput */ a.out: Mach-O 64-bit executable x86_64

您已在Ubuntu 32位计算机(假设为x86)上安装了OpenSSL,但正在尝试将其链接到ARM二进制文件:

  • /home/tashimaya/Applications/codesource/bin/。/lib/gcc/arm-none-linux-gnueabi
    :您的arm工具链
  • /usr/local/ssl/lib/libssl.a
    :32位x86版本的OpenSSL

您必须使用ARM工具链交叉编译ARM的OpenSSL(即:
ARM none linux gnueabi gcc
),然后才能将其链接到ARM二进制文件。

谢谢您的建议。运行“/usr/local/ssl/lib$file libssl.a”将给出此输出“libssl.a:当前ar存档”。我如何获得有关该文件的更多信息?奇怪的是,在mac上输出良好。然后试试lipo-info-myFile.a,你也会得到这个架构。我试过“objdump-f libcrypto.a”。看起来我的libssl.a是32位的,我的C项目也是。你确定它们是相同的体系结构吗?你能展示编译c代码的编译器实际命令吗?请看我的原始帖子。我已经用我的编译器命令行更新了它。我试过运行“file main.o”,我得到了“main.o:ELF 32位LSB可重定位,ARM,版本1(SYSV),而不是剥离”您的目标体系结构是什么?是x86吗?还是手臂?你在交叉编译吗?当你说Ubuntu 12.10 32位时,是ARM吗?我的目标架构是ARM。我已经在Windows7 32位机器上运行的VMware上安装了Ubuntu。您能告诉我如何使用arm none linux gnueabi gcc构建OpenSSL吗?我尝试过“make CC=arm none linux gnueabi gcc”,但似乎不起作用。@jpen:尝试提供编译器的绝对路径。并事先清洁。