4

ダウンロードしてコンパイルしました: http://leenissen.dk/fann/wp/

  • cmake バージョン 2.8.11.2
  • gcc (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1

コンパイルに使用するコマンド:

cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr .

インストール:

sudo make && sudo make install

次に、fann プロジェクト内の examples/ ディレクトリに移動し、次のコマンドを実行してサンプルをコンパイルしようとします。

make all

エラーが発生します:

gcc -O3 xor_train.c -o xor_train -lfann -lm
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sin'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `exp'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `cos'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `log'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `pow'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `sqrt'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so: undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [xor_train] Error 1

アップデート:

  • 図書館の指示に従いました
  • 別のマシンでチェックしたところ、指示が意図したとおりに機能したため、環境の構成が何らかの形で間違っていると思います。

共有ライブラリの依存関係に関する詳細情報:

ldd /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libfann.so
    linux-vdso.so.1 =>  (0x00007fff3abfe000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6f3997c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6f39f84000)

-Wl、-vでコンパイルされた@michael-burrが示唆するように

/usr/bin/ld --sysroot=/ \
  --build-id --eh-frame-hdr -m elf_x86_64 \
  --hash-style=gnu --as-needed \
  -dynamic-linker /lib64/ld-linux-x86-64.so.2 \
  -z relro -o xor_train \
  /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o \
  /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crti.o \
  /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbegin.o \
  -L/usr/lib/gcc/x86_64-linux-gnu/4.8 \
  -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu \
  -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib \
  -L/lib/x86_64-linux-gnu \
  -L/lib/../lib -L/usr/lib/x86_64-linux-gnu \
  -L/usr/lib/../lib \
  -L/usr/lib/gcc/x86_64-linux-gnu/4.8/../../.. \
  -v /tmp/cc0AHZgU.o -lfann -lm -lgcc --as-needed -lgcc_s --no-as-needed \
  -lc -lgcc --as-needed -lgcc_s --no-as-needed \
  /usr/lib/gcc/x86_64-linux-gnu/4.8/crtend.o \
  /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crtn.o
GNU ld (GNU Binutils for Ubuntu) 2.23.52.20130913
4

2 に答える 2

5

根本原因: FANN ライブラリに依存関係がない (作成者にパッチを送信します)。このような依存関係を「ライブラリ間依存関係」と呼びます。

共有ライブラリAを構築し、正しい依存関係が設定されていない場合があります (たとえば、 Bとしましょう)。このような場合、コンパイル中に実装を提供する必要がないため、共有ライブラリAはエラーメッセージなしでビルドされます。

Aに依存する実行可能ファイルを作成しようとすると、問題はライブラリBの欠如として現れます。

この特定のケースでの解決策は、 CMake マニュアルに従って CMake 構成ファイルを変更することです。

チェンジラインの例:

TARGET_LINK_LIBRARIES(fann m)
于 2013-10-31T01:27:14.747 に答える