首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接到libssh -libssh.so时对ARM进行交叉编译:无法识别的文件

链接到libssh -libssh.so时对ARM进行交叉编译:无法识别的文件
EN

Stack Overflow用户
提问于 2014-01-13 02:39:30
回答 1查看 3.7K关注 0票数 2

我想知道是否有可能将我的应用程序链接到libssh,同时交叉编译与。我的主机系统是Ubuntu x86_64

代码语言:javascript
复制
:~/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一起编译:

代码语言:javascript
复制
gcc ssh.c -o ssh -lssh

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

代码语言:javascript
复制
:~/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.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-13 02:53:33

您的第一次尝试是尝试将libssh.o链接到您的主机环境,而不是目标环境。这是因为命令"pkg-config -c阻隔--libs libssh“返回主机上libssh的包配置。

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

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

代码语言:javascript
复制
arm-none-linux-gnueabi-gcc -I{includedir} -L{libdir} ssh.c -o arm -lssh

请注意,libssh反过来依赖于其他库-- openssl和zlib --您还必须交叉编译这些库。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21083052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档