1. ホーム
  2. Linux

[Linux] [コンパイル] libmpc.so.3: cannot open shared object file: そのようなファイルまたはディレクトリはありません

2022-02-09 20:12:24
zlib のクロスコンパイルで libmpc.so.3 が見つからない
root@Nikola:/source/build# make BOARD_TYPE=rt288x PID=PID zlib_build
make CC=mipsel-buildroot-linux-uclibc-gcc AR=mipsel-buildroot-linux-uclibc-ar LD=mipsel-buildroot-linux-uclibc-ld RANLIB=mipsel- buildroot-linux-uclibc-ranlib -C /source/build/...。/... /... /tp-software/develop/open/apps/zlib all
if [ -f zlib-1.2.7/Makefile ]; then \.
                make -C zlib-1.2.7 clean; \?
        フィ
rm -f *.o *.lo *~ \.
           example minigzip examplesh minigzipsh \...
           example64 minigzip64 \
           infcover \ \
           libz.* foo.gz so_locations \.
           _match.s maketree contrib/infback9/*.o
rm -rf objs
rm -f *.gcda *.gcno *.gcov
rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
cd zlib-1.2.7 && . /configure --static
mipsel-buildroot-linux-uclibc-gcc でスタティックライブラリ libz.a バージョン 1.2.7 をビルドしています。
off64_tをチェック中...。いいえ。
fseekoをチェックする... ありません。
ストレラーのチェック中... いいえ
unistd.hのチェック中... いいえ。
stdarg.hのチェック中... いいえ。
vs[n]printf()とs[n]printf()のどちらを使用するか確認中... s[n]printf()を使用します。
stdio.hのsnprintf()をチェックする... ありません。
  警告: snprintf() が見つからないため、sprintf() にフォールバックします。
  ビルドは可能ですが、バッファオーバーフローのセキュリティの可能性があります。
sprintf()の戻り値をチェックする... いいえ。
  警告:どうやら sprintf() は値を返さないようです zlib
  ビルドは可能ですが、文字列フォーマットのセキュリティの可能性があります。
  の脆弱性があります。
4バイト整数型を探しています... 見つかりません。
make -C zlib-1.2.7
mipsel-buildroot-linux-uclibc-gcc -O -DNO_FSEEKO -DNO_STRERROR -DNO_snprintf -DHAS_sprintf_void -I. -c -o example.o test/example.c
/source/toolchain/buildroot-gcc463/usr/bin/... /libexec/gcc/mipsel-buildroot-linux-uclibc/4.6.3/cc1: 共有ライブラリのロード中にエラーが発生しました: libmpc.so.3: 共有オブジェクトファイルを開くことができません。そのようなファイルやディレクトリはありません
ファイルチェックに失敗したのを見て、ヘッダーファイルのルックアップに失敗したのかと思い、zlibディレクトリにあるconfigureのこのコードを見てみました。
# ラージファイルのサポートをチェックし、なければ fseeko() をチェックする。
cat > $test.c <<EOF
#include <sys/types.h>
off64_t dummy = 0;
EOF
if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
  CFLAGS="${CFLAGS}。-D_LARGEFILE64_SOURCE=1"です。
  SFLAGS="${SFLAGS}を指定します。-D_LARGEFILE64_SOURCE=1"です。
  ALL="${ALL} all64"
  TEST="${TEST} test64"
  echo "off64_tのチェック中... Yes." | tee -a configure.log
  echo "fseekoをチェック中... Yes." | tee -a configure.log
  cat $test.c
  echo ======================================================
  echo "$CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c"
  echo +++++++
  echo "off64_tのチェック中... No." | tee -a configure.log
  echo >> configure.log
  cat > $test.c <<EOF
一時的にtest.cファイルを生成し、クロスコンパイラツールでコンパイルし、そのコンパイル結果で判断する方法です。test.cファイルを手動でコンパイルしてみると、これも失敗しているので、問題はlibmpc.so.3というファイルが見つからないことであるはずです
mpc ライブラリが既にインストールされているかどうかを確認します (インストールされていない場合、まず apt-cache search libmpc コマンドで該当するパッケージを検索し、apt-get install でインストールします)。
root@Nikola :/usr/lib# dpkg -l | grep mpc
ii libmpc-dev 0.9-4 多倍精度複素浮動小数点ライブラリ開発パッケージ
ii libmpc2 0.9-4 多倍精度複素浮動小数点演算ライブラリ
ii libmpcdec-dev 2:0.1~r459-1ubuntu1 MusePack decoder - 開発用ファイル
ii libmpcdec6 2:0.1~r459-1ubuntu1 MusePack decoder - ライブラリ
root@Nikola :/usr/lib/i386-linux-gnu#. 
libmpc2 が既にインストールされていることがわかったので、ライブラリのあるディレクトリを検索します。
root@Nikola :/usr/lib# find . -name "*mpc*" | xargs ls -al
-rw-r--r-- 1 root root 53940 Feb 23 2012 . /gimp/2.0/python/gimpcolor.so
-rw-r--r-- 1 root root 161270 Oct 19 2011 . /i386-linux-gnu/libmpc.a
lrwxrwx 1 root root 15 Oct 19 2011 . /i386-linux-gnu/libmpc.so -> libmpc.so.2.0.0
lrwxrwx 1 root root 15 Dec 19 2014 . /i386-linux-gnu/libmpc.so.2 -> libmpc.so.2.0.0
-rw-r--r-- 1 root root 87972 Oct 19 2011 . /i386-linux-gnu/libmpc.so.2.0.0
libmpc.so.3のファイルが見当たりません。これはリンクファイルのはずなので、作成する必要があります。libmpc.so.2.0.0のあるディレクトリ i386-linux-gnu に移動してリンクファイルを作成します。
root@Nikola :/usr/lib# ln -s libmpc.so.2.0.0 libmpc.so.3
正常に作成され、その後zlibを再コンパイルすると、OK