【问题标题】:Cross-compiling for ARM while linking to libssh - libssh.so: file not recognized在链接到 libssh 时交叉编译 ARM - libssh.so:文件无法识别
【发布时间】:2014-01-13 10:53:33
【问题描述】:

我想知道是否可以在使用适用于 ARM 的 Sourcery 工具链进行交叉编译时将我的应用程序链接到 libssh。我的主机系统是 Ubuntu x86_64

:~/c/ssh$ arm-none-linux-gnueabi-gcc ssh.c -o arm `pkg-config --cflags --libs libssh`
cc1: warning: include location "/usr/local/include" is unsafe for cross-compilation [-Wpoison-system-directories]
/home/user/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../lib/gcc/arm-none-linux-gnueabi/4.6.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation
/usr/local/lib/libssh.so: file not recognized: File format not recognized
collect2: ld returned 1 exit status

我的应用程序使用这个命令在 gcc 中编译得很好:

gcc ssh.c -o ssh -lssh

在交叉编译时添加相同的 -lssh 标志会导致以下错误:

:~/c/ssh$ arm-none-linux-gnueabi-gcc ssh.c -o arm -lssh
ssh.c:2:49: fatal error: libssh/libssh.h: No such file or directory
compilation terminated.

【问题讨论】:

    标签: arm cross-compiling libssh


    【解决方案1】:

    您的第一次尝试是尝试从您的主机环境而不是您的目标环境链接 libssh.o。这是因为“pkg-config --cflags --libs libssh”命令会返回你主机上libssh的包配置。

    您将需要专门为目标环境 (ARM) 获取或编译 libssh 的副本。

    如果自己编译它(可能是你唯一的选择,对我来说至少快速谷歌没有显示任何合适的预构建包),那么你应该指定一个单独的安装目录,例如。在您的主目录某处。这将产生单独的 include 和 lib 目录,其中包含交叉编译的 libssh,您可以从自己的编译命令中引用它,例如:

    arm-none-linux-gnueabi-gcc -I{includedir} -L{libdir} ssh.c -o arm -lssh
    

    请注意,libssh 又依赖于其他库 - o​​penssl 和 zlib - 您还必须交叉编译。

    【讨论】:

    • 感谢您的明确答复。我将尝试为 ARM 构建 libssh。
    • 看看嵌入式 Linux 发行版,例如 BuildrootOpenEmbeddedEmbedded Debian Project。在交叉编译具有许多依赖项的包时,它们可以节省大量时间和麻烦。
    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 2017-11-04
    • 2015-03-17
    相关资源
    最近更新 更多