コンテキスト
私のuname -rv
もの4.4.0-64-generic #85~14.04.1-Ubuntu SMP Mon Feb 20 12:10:54 UTC 2017
---私のコンパイラはGNU gcc 6.3.0です。 ---ソースからGNU Octaveをコンパイルしています。私はOctaveバージョン4.0.2、4.2.0、4.2.1をコンパイルしようとしました。
呼び出し構成を使用してビルドします。
${srcdir}/configure \
--prefix=/opt/octave/4.2.1 \
--with-java-homedir=/usr/lib/jvm/default-java \
--with-java-libdir=/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server
質問
いずれの場合も、次のエラーにより make ステップが失敗します。
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::ping(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::CoderInfo::description[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::comment[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::magick[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::CoderInfo::CoderInfo(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
collect2: error: ld returned 1 exit status
証拠
手動インストールを準備しながら、sudo apt-get build-dep octave
現在Ubuntu 14.04でサポートされているバージョン3.8.1に関連しています。しかし、病気ではないと思います。 (ソースディレクトリのINSTALL.OCTAVEファイルで提案)
安全のために、Ubuntuリポジトリ8:6.7.7.10-6ubuntu3.4にライブラリをインストールしましたlibmagickcore-dev
。問題があるかどうかにかかわらず、問題が発生します。libmagickwand-dev
libmagick++-dev
したがって、dpkg -l | grep magick
それを示しています
ii imagemagick 8:6.7.7.10-6ubuntu3.4 amd64 image manipulation programs
ii imagemagick-common 8:6.7.7.10-6ubuntu3.4 all image manipulation programs -- infrastructure
ii libgraphicsmagick++1-dev 1.3.18-1ubuntu3 amd64 format-independent image processing - C++ development files
ii libgraphicsmagick++3 1.3.18-1ubuntu3 amd64 format-independent image processing - C++ shared library
ii libgraphicsmagick1-dev 1.3.18-1ubuntu3 amd64 format-independent image processing - C development files
ii libgraphicsmagick3 1.3.18-1ubuntu3 amd64 format-independent image processing - C shared library
ii libmagick++-dev 8:6.7.7.10-6ubuntu3.4 amd64 object-oriented C++ interface to ImageMagick - development files
ii libmagick++5:amd64 8:6.7.7.10-6ubuntu3.4 amd64 object-oriented C++ interface to ImageMagick
ii libmagickcore-dev 8:6.7.7.10-6ubuntu3.4 amd64 low-level image manipulation library - development files
ii libmagickcore5:amd64 8:6.7.7.10-6ubuntu3.4 amd64 low-level image manipulation library
ii libmagickcore5-extra:amd64 8:6.7.7.10-6ubuntu3.4 amd64 low-level image manipulation library - extra codecs
ii libmagickwand-dev 8:6.7.7.10-6ubuntu3.4 amd64 image manipulation library - development files
ii libmagickwand5:amd64 8:6.7.7.10-6ubuntu3.4 amd64 image manipulation library
構成ステップは状態 0 で正常に終了します。
(設定ステップが100%完璧ではありません。インストールがなく、設定がgnulib
キャプチャされていないため、以前のビルドに失敗しました。)
https://stackoverflow.com/questions/39228019/error-while-compiling-octave-with-gccliboctinterp.so
Octave 4.0.2以降、未定義の参照が既知の機能であることを示します。このバグのある動作は、4.2.0 で持続するか、または私が見逃した隠された要件があります。
質問
Octaveの編集を正常に完了するにはどうすればよいですか?
ベストアンサー1
ここにも同じエラーがありますが、競合するライブラリに関する警告があります。これは便利な手がかりです。
/usr/local/gcc-6.4.0_binutils-2.28.1_isl/lib64/gcc/x86_64-pc-linux-gnu/6.4.0/../../../../x86_64-pc-linux-gnu/bin/ld: warning: libjpeg.so.8, needed by /usr/lib/../lib64/libtiff.so, may conflict with libjpeg.so.62
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::ping(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::attribute(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::CoderInfo::description[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::comment[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::Image::magick[abi:cxx11]() const'
libinterp/.libs/liboctinterp.so: undefined reference to `Magick::CoderInfo::CoderInfo(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
Magick::Image::ping
これはC ++ライブラリにあると予想されます。どのライブラリが使用されているかを見てみましょう。
ldd libinterp/.libs/liboctinterp.so | grep -i magick++
libGraphicsMagick++.so.12 => /usr/local/gcc-6.4.0_binutils-2.28.1_isl/lib64/libGraphicsMagick++.so.12 (0x00007faa870ab000)
しかしMagick::Image::ping
それは存在します:
nm -C /usr/local/gcc-6.4.0_binutils-2.28.1_isl/lib64/libGraphicsMagick++.so | grep ping
000000000004c7a0 T Magick::Image::ping(Magick::Blob const&)
000000000004c740 T Magick::Image::ping(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
したがって、リンカーがそれを正しく使用できないという問題があります。
libGraphicsMagick++.so は別の手がかりとして良いです。建設手順、同じライブラリ、Octave安定ブランチは正常に構築されますが、開発ブランチは失敗します。
前の警告を真剣に受け入れよう実際にすでに気付いたそれ
openSUSE 12.04および13.02では、libjpeg-develパッケージのためにlibjpeg62.soがインストールされ、これもインストールされているlibjpeg8.soと競合する可能性があります。そのため、libjpeg-develではなくlibjpeg8-develをインストールすることをお勧めします。
libjpeg62-devel
〜しなければならない交換済みこれは、複数のパッケージがjpeglibjpeg8-devel
ライブラリに依存しているためです。
openSUSE 42.2 で次のコマンドが実行されました。
sudo zypper install libjpeg8-devel
Problem: libjpeg62-devel-62.2.0-35.3.1.x86_64 conflicts with namespace:otherproviders(libjpeg-devel) provided by libjpeg8-devel-8.1.2-119.5.x86_64
Solution 1: deinstallation of libjpeg62-devel-62.2.0-35.3.1.x86_64
Solution 2: do not install libjpeg8-devel-8.1.2-119.5.x86_64
Choose from above solutions by number or cancel [1/2/c] (c): 1
The following NEW package is going to be installed:
libjpeg8-devel
The following package is going to be REMOVED:
libjpeg62-devel
1 new package to install, 1 to remove.
Overall download size: 110.8 KiB. Already cached: 0 B. After the operation, additional 63.6 KiB will be used.
Continue? [y/n/...? shows all options] (y):
ただし、JPEGライブラリはまだ存在します。このパッケージを見てみましょう:
zypper se -f /usr/lib64/libjpeg.so.62.2.0
+ | libjpeg62 | The MMX/SSE accelerated JPEG compression/decompression library | package
ライブラリの削除:
sudo zypper rm libjpeg62
The following package is going to be REMOVED:
libjpeg62
次に、GraphicsMagick-1.3.28を再構築してインストールします。これでオクターブ構成が通過しました。