01B*_*C10 2 arm cross-compiling libssh
我想知道在与Sourcery工具链进行ARM交叉编译时是否有可能将我的应用程序链接到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
Run Code Online (Sandbox Code Playgroud)
我的应用使用gcc使用以下命令可以正常编译:
gcc ssh.c -o ssh -lssh
Run Code Online (Sandbox Code Playgroud)
交叉编译时添加相同的-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.
Run Code Online (Sandbox Code Playgroud)
您的第一次尝试是尝试从主机环境而不是目标环境链接libssh.o。这是因为命令“ pkg-config --cflags --libs libssh”返回主机上libssh的软件包配置。
您将需要获取或编译专门用于目标环境(ARM)的libssh副本。
如果自己编译(可能是您唯一的选择,对我来说至少是快速的google没有显示任何合适的预编译包),则应指定一个单独的安装目录,例如。在您的主目录中。这将导致单独的include和lib dirs,其中包含交叉编译的libssh,您可以从自己的编译命令中引用它们,例如:
arm-none-linux-gnueabi-gcc -I{includedir} -L{libdir} ssh.c -o arm -lssh
Run Code Online (Sandbox Code Playgroud)
请注意,libssh依次依赖于其他库-openssl和zlib-您还必须对其进行交叉编译。
| 归档时间: |
|
| 查看次数: |
2932 次 |
| 最近记录: |