2

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.
4

1 に答える 1

5

最初の試みは、ターゲット環境ではなくホスト環境から libssh.o をリンクしようとしています。これは、コマンド「pkg-config --cflags --libs libssh」がホスト マシン上の libssh のパッケージ構成を返すためです。

ターゲット環境 (ARM) 専用の libssh のコピーを取得またはコンパイルする必要があります。

自分でコンパイルする場合(おそらく唯一のオプションです。少なくとも私にとっては、簡単なグーグルで適切なビルド済みパッケージが明らかになりませんでした)、別のインストールディレクトリを指定する必要があります。ホームディレクトリのどこかに。これにより、クロスコンパイルされたlibsshを含む個別のインクルードディレクトリとlibディレクトリが作成され、独自のコンパイルコマンドから参照できます。

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

libssh は他のライブラリ (openssl と zlib) に依存していることに注意してください。これらもクロスコンパイルする必要があります。

于 2014-01-13T02:53:33.043 に答える