Blender 100%コンパイル時にldエラー「未定義参照」の問題を解決する方法

Blender 100%コンパイル時にldエラー「未定義参照」の問題を解決する方法

次の手順に従って、コンピュータにクリーンブレンダーをインストールしようとします。このページ

make コマンドの後、Web ページのビルド段階でビルドがクラッシュします。

$ cd ~/blender-git/blender
$ make
[  1%] Built target bf_intern_clog
[ ...] Other succesful steps
[100%] Linking CXX executable ../../bin/blender
../../lib/libbf_intern_iksolver.a(IK_Solver.cpp.o):IK_Solver.cpp:function IK_FreeSolver: error: undefined reference to 'IK_QJacobian::~IK_QJacobian()'
../../lib/libbf_intern_iksolver.a(IK_Solver.cpp.o):IK_Solver.cpp:function IK_FreeSolver: error: undefined reference to 'IK_QJacobian::~IK_QJacobian()'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::IK_QJacobianSolver(): error: undefined reference to 'IK_QJacobian::IK_QJacobian()'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::IK_QJacobianSolver(): error: undefined reference to 'IK_QJacobian::IK_QJacobian()'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Setup(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >&): error: undefined reference to 'IK_QJacobian::ArmMatrices(int, int)'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Setup(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >&): error: undefined reference to 'IK_QJacobian::SetDoFWeight(int, double)'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Setup(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >&): error: undefined reference to 'IK_QJacobian::ArmMatrices(int, int)'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Solve(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >, double, int): error: undefined reference to 'IK_QJacobian::Invert()'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Solve(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >, double, int): error: undefined reference to 'IK_QJacobian::SubTask(IK_QJacobian&)'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::Solve(IK_QSegment*, std::list<IK_QTask*, std::allocator<IK_QTask*> >, double, int): error: undefined reference to 'IK_QJacobian::AngleUpdateNorm() const'
../../lib/libbf_intern_iksolver.a(IK_QJacobianSolver.cpp.o):IK_QJacobianSolver.cpp:function IK_QJacobianSolver::IK_QJacobianSolver() [clone .cold]: error: undefined reference to 'IK_QJacobian::~IK_QJacobian()'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QElbowSegment::UpdateAngle(IK_QJacobian const&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&, bool*): error: undefined reference to 'IK_QJacobian::AngleUpdate(int) const'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QElbowSegment::UpdateAngle(IK_QJacobian const&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&, bool*): error: undefined reference to 'IK_QJacobian::AngleUpdate(int) const'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QTranslateSegment::UpdateAngle(IK_QJacobian const&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&, bool*): error: undefined reference to 'IK_QJacobian::AngleUpdate(int) const'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QSwingSegment::Lock(int, IK_QJacobian&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&): error: undefined reference to 'IK_QJacobian::Lock(int, double)'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QSphericalSegment::Lock(int, IK_QJacobian&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&): error: undefined reference to 'IK_QJacobian::Lock(int, double)'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QRevoluteSegment::UpdateAngle(IK_QJacobian const&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&, bool*): error: undefined reference to 'IK_QJacobian::AngleUpdate(int) const'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QRevoluteSegment::Lock(int, IK_QJacobian&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&): error: undefined reference to 'IK_QJacobian::Lock(int, double)'
../../lib/libbf_intern_iksolver.a(IK_QSegment.cpp.o):IK_QSegment.cpp:function IK_QSwingSegment::Lock(int, IK_QJacobian&, Eigen::Matrix<double, 3, 1, 0, 3, 1>&): error: undefined reference to 'IK_QJacobian::Lock(int, double)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QOrientationTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetBetas(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QOrientationTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetDerivatives(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&, double)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QOrientationTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetDerivatives(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&, double)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QPositionTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetBetas(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QPositionTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetDerivatives(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&, double)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QPositionTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetDerivatives(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&, double)'
../../lib/libbf_intern_iksolver.a(IK_QTask.cpp.o):IK_QTask.cpp:function IK_QCenterOfMassTask::ComputeJacobian(IK_QJacobian&): error: undefined reference to 'IK_QJacobian::SetBetas(int, int, Eigen::Matrix<double, 3, 1, 0, 3, 1> const&)'
../../lib/libbf_intern_libmv.a(homography.cc.o):homography.cc:function libmv_homography2DFromCorrespondencesEuc: error: undefined reference to 'libmv::EstimateHomographyOptions::EstimateHomographyOptions()'
../../lib/libbf_intern_libmv.a(homography.cc.o):homography.cc:function libmv_homography2DFromCorrespondencesEuc: error: undefined reference to 'libmv::EstimateHomography2DFromCorrespondences(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, libmv::EstimateHomographyOptions const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(initialize_reconstruction.cc.o):initialize_reconstruction.cc:function libmv::EuclideanReconstructTwoFrames(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::EuclideanReconstruction*): error: undefined reference to 'libmv::NormalizedEightPointSolver(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(initialize_reconstruction.cc.o):initialize_reconstruction.cc:function libmv::EuclideanReconstructTwoFrames(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::EuclideanReconstruction*): error: undefined reference to 'libmv::FundamentalToEssential(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(initialize_reconstruction.cc.o):initialize_reconstruction.cc:function libmv::EuclideanReconstructTwoFrames(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::EuclideanReconstruction*): error: undefined reference to 'libmv::MotionFromEssentialAndCorrespondence(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*, Eigen::Matrix<double, 3, 1, 0, 3, 1>*)'
../../lib/libbf_intern_libmv.a(initialize_reconstruction.cc.o):initialize_reconstruction.cc:function libmv::ProjectiveReconstructTwoFrames(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::ProjectiveReconstruction*): error: undefined reference to 'libmv::NormalizedEightPointSolver(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(initialize_reconstruction.cc.o):initialize_reconstruction.cc:function libmv::ProjectiveReconstructTwoFrames(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::ProjectiveReconstruction*): error: undefined reference to 'libmv::ProjectionsFromFundamental(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 4, 0, 3, 4>*, Eigen::Matrix<double, 3, 4, 0, 3, 4>*)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::EstimateHomographyOptions::EstimateHomographyOptions()'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::EstimateHomography2DFromCorrespondences(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, libmv::EstimateHomographyOptions const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::EstimateFundamentalOptions::EstimateFundamentalOptions()'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::EstimateFundamentalFromCorrespondences(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, libmv::EstimateFundamentalOptions const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::SymmetricGeometricDistance(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::SymmetricEpipolarDistance(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::FundamentalToEssential(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*)'
../../lib/libbf_intern_libmv.a(keyframe_selection.cc.o):keyframe_selection.cc:function libmv::SelectKeyframesBasedOnGRICAndVariance(libmv::Tracks const&, libmv::CameraIntrinsics const&, std::vector<int, Eigen::aligned_allocator<int> >&): error: undefined reference to 'libmv::MotionFromEssentialAndCorrespondence(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, Eigen::Matrix<double, 2, 1, 0, 2, 1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*, Eigen::Matrix<double, 3, 1, 0, 3, 1>*)'
../../lib/libbf_intern_libmv.a(resect.cc.o):resect.cc:function libmv::EuclideanResect(std::vector<libmv::Marker, Eigen::aligned_allocator<libmv::Marker> > const&, libmv::EuclideanReconstruction*, bool): error: undefined reference to 'libmv::euclidean_resection::EuclideanResection(Eigen::Matrix<double, 2, -1, 0, 2, -1> const&, Eigen::Matrix<double, 3, -1, 0, 3, -1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*, Eigen::Matrix<double, 3, 1, 0, 3, 1>*, libmv::euclidean_resection::ResectionMethod)'
../../lib/libbf_intern_libmv.a(track_region.cc.o):track_region.cc:function libmv::(anonymous namespace)::ComputeCanonicalHomography(double const*, double const*, int, int): error: undefined reference to 'libmv::Homography2DFromCorrespondencesLinear(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*, double)'
../../lib/libbf_intern_libmv.a(track_region.cc.o):track_region.cc:function libmv::(anonymous namespace)::HomographyWarp::HomographyWarp(double const*, double const*, double const*, double const*): error: undefined reference to 'libmv::Homography2DFromCorrespondencesLinear(Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, -1, -1, 0, -1, -1> const&, Eigen::Matrix<double, 3, 3, 0, 3, 3>*, double)'
collect2: error: ld returned 1 exit status
source/creator/CMakeFiles/blender.dir/build.make:580: recipe for target 'bin/blender' failed
make[3]: *** [bin/blender] Error 1
CMakeFiles/Makefile2:8857: recipe for target 'source/creator/CMakeFiles/blender.dir/all' failed
make[2]: *** [source/creator/CMakeFiles/blender.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make[1]: *** [all] Error 2
GNUmakefile:340: recipe for target 'all' failed
make: *** [all] Error 2

IK_xxx.cppファイルに問題があるようです。私がどのように進むべきかという提案がある人はいますか?

フォルダを確認してみると、/libその名前のサブフォルダがないと思いますかlibbf_intern_iksolver

lib/linux_centos7_x86_64$ ls -a
.        fftw3     llvm         openimagedenoise  potrace  tbb
..       freetype  mesa         openimageio       pugixml  tiff
alembic  glew      nanovdb      openjpeg          python   usd
blosc    gmp       openal       opensubdiv        sdl      xml2
boost    haru      opencollada  openvdb           sndfile  xr_openxr_sdk
embree   jemalloc  opencolorio  osl               spnav    zlib
ffmpeg   jpeg      openexr      png               .svn     zstd

ベストアンサー1

最後のエラーメッセージは、リンク時に何かが見つかりませんでしたが、それ以外の場合はビルドが正しく機能することを意味します。奇妙な。

たぶん、いくつかのライブラリ(エラーで言及されたライブラリ)が間違ったバージョンですか?それともどこかに落ちたものはありますか?

Blenderパッケージはオープンソースであり、非常に有名です。ディストリビューションに適したパッケージが必要です。ソースパッケージをインポートしてパッケージを分析します。配布パッチが必要な場合や、それを開始点として使用して、独自の最新および最高のパッチを構築することもできます。

おすすめ記事