2

按照此处给出的说明,我从此处下载了最新版本的 OpenSSL (openssl-1.0.1e.tar.gz)并将其安装在 Ubuntu v12.10(32 位)上。

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

  • 主页/usr/local/ssl/lib/libcrypto.a
  • 主页/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"
4

2 回答 2

3

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

  • /home/tashimaya/Applications/CodeSourcery/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 二进制文件。

于 2013-03-01T14:41:00.187 回答
0

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

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

例子:

文件 a.out

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

http://unixhelp.ed.ac.uk/CGI/man-cgi?file

于 2013-03-01T12:57:01.733 回答