Undefined Symbols when building Blender as Python Module

I’m trying to build Blender as a python module and am running into Undefined Symbol issues on both mac OS 10.13.6 and Ubuntu 18.04. Any help on this would be greatly appreciated. On both systems I’m able to make the full version of blender (i.e. not as a Python module) and I have successfully built older versions of Blender as a python module successfully on both systems. Here’s whats going on:

Ubuntu:
Following the general build instructions from the offical blender wiki:

mkdir ~/blender-git
cd ~/blender-git
git clone https://git.blender.org/blender.git
cd blender
git submodule update --init --recursive
git submodule foreach git checkout master
git submodule foreach git pull --rebase origin master
make update
cd ~/blender-git
./blender/build_files/build_environment/install_deps.sh

I then run ‘make bpy’ instead of the usual ‘make’ which should set make options for building as a python module. Blender seems to compile successfully but when I find the bpy.so file and the 2.80 folder this creates, and enter into a python shell, i get the following errors:

mport bpy
Traceback (most recent call last):
File “”, line 1, in
ImportError: /home/skadmin/.virtualenvs/p1env/lib/python3.7/site-packages/2.80/bpy.so: undefined symbol: UI_icons_reload_internal_textures

I have tried installing into my python site packages folder both inside and outside of my virtual environment. The bpy.so file is always in the same directory as the 2.80 file the make bpy creates. I have even adding:

export PYTHONPATH=/path/to/bpy.so:$PYTHONPATH

to my .bashrc, which worked with past versions of blender. Nothing seems to get rid of this undefined symbol import error.

mac OS
I follow similar steps on mac OS:

mkdir ~/blender-build
cd ~/blender-build
git clone http://git.blender.org/blender.git
cd blender
make update
import bpy

I get to just about the last step of the build process and get hit with the following error which also references undefined symbols to UI_icons_reload_internal_textures. The Ubuntu build is much more important to me, but I thought I’d post the mac error because it seems related. Error message is below. Any help with this would be huge. Thanks!

100%] Linking CXX shared module ../../bin/bpy.so
Undefined symbols for architecture x86_64:
  "_UI_icons_reload_internal_textures", referenced from:
      _rna_userdef_theme_update_icons in libbf_rna.a(rna_userdef_gen.c.o)
  "___kmpc_barrier", referenced from:
      _.omp_outlined. in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined..3 in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined. in libbf_intern_smoke.a(FLUID_3D.cpp.o)
      _.omp_outlined. in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..53 in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..55 in libbf_intern_elbeem.a(solver_main.cpp.o)
  "___kmpc_critical", referenced from:
      messageOutputFunc(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned long) in libbf_intern_elbeem.a(utilities.cpp.o)
      _.omp_outlined. in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..53 in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..55 in libbf_intern_elbeem.a(solver_main.cpp.o)
  "___kmpc_dispatch_init_4", referenced from:
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..3 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      _.omp_outlined..6 in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      _.omp_outlined..7 in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      ...
  "___kmpc_dispatch_next_4", referenced from:
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..3 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      _.omp_outlined..6 in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      _.omp_outlined..7 in libextern_ceres.a(schur_eliminator_d_d_d.cc.o)
      ...
  "___kmpc_end_critical", referenced from:
      messageOutputFunc(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, unsigned long) in libbf_intern_elbeem.a(utilities.cpp.o)
      _.omp_outlined. in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..53 in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..55 in libbf_intern_elbeem.a(solver_main.cpp.o)
  "___kmpc_end_reduce_nowait", referenced from:
      _.omp_outlined. in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..53 in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..55 in libbf_intern_elbeem.a(solver_main.cpp.o)
  "___kmpc_end_serialized_parallel", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
  "___kmpc_end_single", referenced from:
      _.omp_outlined. in libbf_intern_smoke.a(FLUID_3D.cpp.o)
  "___kmpc_flush", referenced from:
      _.omp_outlined. in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..9 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..10 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..11 in libextern_ceres.a(evaluator.cc.o)
  "___kmpc_for_static_fini", referenced from:
      _.omp_outlined. in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..3 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..4 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined. in libbf_physics.a(implicit_blender.c.o)
      _.omp_outlined. in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined..3 in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined. in libbf_intern_smoke.a(FLUID_3D.cpp.o)
      ...
  "___kmpc_for_static_init_4", referenced from:
      _.omp_outlined. in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..3 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..4 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined. in libbf_physics.a(implicit_blender.c.o)
      _.omp_outlined. in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined..3 in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined. in libbf_intern_smoke.a(FLUID_3D.cpp.o)
      ...
  "___kmpc_fork_call", referenced from:
      _ccgSubSurf__sync_opensubdiv in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_eigen.a(linear_solver.cc.o)
      ...
  "___kmpc_global_thread_num", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      ...
  "___kmpc_push_num_threads", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_eigen.a(linear_solver.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      ...
  "___kmpc_reduce_nowait", referenced from:
      _.omp_outlined. in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..53 in libbf_intern_elbeem.a(solver_main.cpp.o)
      _.omp_outlined..55 in libbf_intern_elbeem.a(solver_main.cpp.o)
  "___kmpc_serialized_parallel", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
  "___kmpc_single", referenced from:
      _.omp_outlined. in libbf_intern_smoke.a(FLUID_3D.cpp.o)
  "_omp_get_max_threads", referenced from:
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_eigen.a(linear_solver.cc.o)
      WTURBULENCE::stepTurbulenceFull(float, float*, float*, float*, unsigned char*) in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      FLUID_3D::step(float, float*) in libbf_intern_smoke.a(FLUID_3D.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(Scene.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 8, 0, -1, 8> const, -1, 8, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 8, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 8, 0, -1, 8> const, -1, 8, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 8, 1, false> > const&, long, long, bool) in libbf_intern_libmv.a(homography.cc.o)
      ...
  "_omp_get_num_threads", referenced from:
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1> const, 0, Eigen::OuterStride<-1> >, Eigen::Map<Eigen::Matrix<double, -1, -1, 0, -1, -1>, 0, Eigen::OuterStride<-1> >, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_eigen.a(linear_solver.cc.o)
      _.omp_outlined. in libbf_intern_eigen.a(linear_solver.cc.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_eigen.a(linear_solver.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      ...
  "_omp_get_thread_num", referenced from:
      _.omp_outlined. in libbf_intern_eigen.a(linear_solver.cc.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_eigen.a(linear_solver.cc.o)
      _.omp_outlined. in libbf_intern_smoke.a(WTURBULENCE.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      ...
  "_omp_get_wtime", referenced from:
      ceres::internal::WallTimeInSeconds() in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::EventLogger(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::EventLogger(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::~EventLogger() in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::AddEvent(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [bin/bpy.so] Error 1
make[2]: *** [source/creator/CMakeFiles/blender.dir/all] Error 2
make[1]: *** [all] Error 2
make: *** [all] Error 2

I am getting exactly the same error. Did you ever find a solution to this problem?

1 Like

I was able to build blender as a python module successfully on Ubuntu 18.04. I did not try again on Mac.

It’s been a while, but I believe the error was somewhere in the blender source code and should be fixed at this point. You should be able to pull the latest blender version from the git repo and successfully build blender as a python module using the steps in my original post.

Best of luck!

Thanks for the input. I seem to be getting the same error for multiple versions of the code on mac. (I tried building it for Blender 2.8, 2.81and the master branch with code from the git repo.).

I switched to Ubuntu 18.04 now, did you get the import buy to work on Ubuntu?

I was successful with Ubuntu 18.04. I followed the steps in my first post to pull the repo and install the dependencies, and then I built with “make bpy”.

This creates a bpy.so file and 2.XX (whatever version you’re building) directory. Mine was located in:

~/usr/local/PYTHON_SITE_PACKAGES-NOTFOUND

I’m installing to a virtual environment, so I moved that file and directory to the python site packages directory of my virtual environment.

That is what worked for me.

I’m getting the same error on Mac OS Mojave:

[ 98%] Linking CXX shared module ../../bin/bpy.so
Undefined symbols for architecture x86_64:
  "___kmpc_dispatch_init_4", referenced from:
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..3 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      _.omp_outlined..6 in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      _.omp_outlined..7 in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      ...
  "___kmpc_dispatch_init_8", referenced from:
      _.omp_outlined. in libbf_intern_eigen.a(linear_solver.cc.o)
  "___kmpc_dispatch_next_4", referenced from:
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..3 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      _.omp_outlined..6 in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      _.omp_outlined..7 in libextern_ceres.a(schur_eliminator_2_2_2.cc.o)
      ...
  "___kmpc_dispatch_next_8", referenced from:
      _.omp_outlined. in libbf_intern_eigen.a(linear_solver.cc.o)
  "___kmpc_end_serialized_parallel", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
  "___kmpc_flush", referenced from:
      _.omp_outlined. in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..9 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..10 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..11 in libextern_ceres.a(evaluator.cc.o)
  "___kmpc_for_static_fini", referenced from:
      _.omp_outlined. in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..3 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..4 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined. in libbf_physics.a(implicit_blender.c.o)
      _.omp_outlined. in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..9 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..10 in libextern_ceres.a(evaluator.cc.o)
      ...
  "___kmpc_for_static_init_4", referenced from:
      _.omp_outlined. in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..3 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined..4 in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      _.omp_outlined. in libbf_physics.a(implicit_blender.c.o)
      _.omp_outlined. in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..9 in libextern_ceres.a(evaluator.cc.o)
      _.omp_outlined..10 in libextern_ceres.a(evaluator.cc.o)
      ...
  "___kmpc_fork_call", referenced from:
      _ccgSubSurf__sync_opensubdiv in libbf_blenkernel.a(CCGSubSurf_opensubdiv.c.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
      Eigen::internal::sparse_time_dense_product_impl<Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, double, 1, true>::run(Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> > const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, double const&) in libbf_intern_eigen.a(linear_solver.cc.o)
      ...
  "___kmpc_global_thread_num", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined. in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..1 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _.omp_outlined..2 in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      ...
  "___kmpc_push_num_threads", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      Eigen::internal::sparse_time_dense_product_impl<Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, double, 1, true>::run(Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> > const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, double const&) in libbf_intern_eigen.a(linear_solver.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      ...
  "___kmpc_serialized_parallel", referenced from:
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::ApplyIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<unsigned char>(unsigned char const*, int, int, int, unsigned char*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Apply<float>(float const*, int, int, int, float*) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      void libmv::internal::LookupWarpGrid::Update<libmv::(anonymous namespace)::InvertIntrinsicsFunction>(libmv::CameraIntrinsics const&, int, int, double) in libbf_intern_libmv.a(camera_intrinsics.cc.o)
      _BPH_mass_spring_solve_velocities in libbf_physics.a(implicit_blender.c.o)
  "_omp_get_max_threads", referenced from:
      Eigen::internal::sparse_time_dense_product_impl<Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> >, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, double, 1, true>::run(Eigen::Transpose<Eigen::SparseMatrix<double, 0, int> > const&, Eigen::Matrix<double, -1, 1, 0, -1, 1> const&, Eigen::Matrix<double, -1, 1, 0, -1, 1>&, double const&) in libbf_intern_eigen.a(linear_solver.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(Scene.cpp.o)
      void Eigen::internal::generic_product_impl<Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, -1, false>, Eigen::DenseShape, Eigen::DenseShape, 8>::scaleAndAddTo<Eigen::Matrix<double, 6, 1, 0, 6, 1> >(Eigen::Matrix<double, 6, 1, 0, 6, 1>&, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false> const&, Eigen::Block<Eigen::Matrix<double, -1, 1, 0, -1, 1>, -1, -1, false> const&, double const&) in libbf_intern_itasc.a(Scene.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 8, 0, -1, 8> const, -1, 8, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 8, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 8, 0, -1, 8> const, -1, 8, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 8, 1, false> > const&, long, long, long, bool) in libbf_intern_libmv.a(homography.cc.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 15, 0, -1, 15> const, -1, 15, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 15, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Block<Eigen::Matrix<double, -1, 15, 0, -1, 15> const, -1, 15, false>, Eigen::Block<Eigen::Matrix<double, -1, -1, 0, -1, -1>, -1, -1, false>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, 15, 1, false> > const&, long, long, long, bool) in libbf_intern_libmv.a(homography.cc.o)
      ...
  "_omp_get_num_threads", referenced from:
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      void Eigen::internal::parallelize_gemm<true, Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> >, long>(Eigen::internal::gemm_functor<double, long, Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::internal::gemm_blocking_space<0, double, double, -1, -1, -1, 1, false> > const&, long, long, long, bool) in libbf_intern_itasc.a(Scene.cpp.o)
      ...
  "_omp_get_thread_num", referenced from:
      _.omp_outlined. in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(WSDLSSolver.cpp.o)
      _.omp_outlined. in libbf_intern_itasc.a(Scene.cpp.o)
      Eigen::internal::general_matrix_matrix_product<long, double, 0, false, double, 0, false, 0>::run(long, long, long, double const*, long, double const*, long, double*, long, double, Eigen::internal::level3_blocking<double, double>&, Eigen::internal::GemmParallelInfo<long>*) in libbf_intern_itasc.a(Scene.cpp.o)
      _.omp_outlined. in libbf_intern_libmv.a(homography.cc.o)
      ...
  "_omp_get_wtime", referenced from:
      ceres::internal::WallTimeInSeconds() in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::EventLogger(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::EventLogger(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::~EventLogger() in libextern_ceres.a(wall_time.cc.o)
      ceres::internal::EventLogger::AddEvent(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in libextern_ceres.a(wall_time.cc.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [bin/bpy.so] Error 1
make[2]: *** [source/creator/CMakeFiles/blender.dir/all] Error 2
make[1]: *** [all] Error 2
make: *** [all] Error 2

Building blender.app works fine

Hi, having the same problem here, anyone got a solution?

1 Like

Has anyone found a solution to this for mac OS? It’s driving me nuts.

@Nabla @ChrisBarry @badjano Try adding -L'Resources/lib' -lomp to the line

string(APPEND PLATFORM_LINKFLAGS " /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")

in platform_apple.cmake line 211.

https://developer.blender.org/D9573 Don’t apply other changes except those said here.

After building bpy, I read that that python versions should match… and I don’t have the courage to do it again with python 3.7. For now it crashes for me with

>>> import bpy
Fatal Python error: _PyInterpreterState_Get(): no current thread state
Python runtime state: unknown

Abort trap: 6

But at least it links.

Another way is to rebuild with -DWITH_OPENMP=OFF. Untested:

cmake ../blender -DWITH_OPENMP=OFF -C ../blender/build_files/cmake/config/bpy_module.cmake
make install -j 4

add -DWITH_OPENMP=OFF, it is helpful! Thanks! Eigen error is gone!

Thank you! -DWITH_OPENMP=OFF worked for me. But when I import bpy in python I get Segmentation fault : 11 and my python session craches. What else am I missing, here?

1 Like

FIY, if anyone gets this segfault, you can get the full traceback with import faulthandler; faulthandler.enable(). In my case, the traceback was

Fatal Python error: Segmentation fault 
Current thread 0x0000000115ba7dc0 (most recent call first):
      File "<frozen importlib._bootstrap>", line 219 in _call_with_frames_removed
      File "<frozen importlib._bootstrap_external>", line 1043 in create_module
      File "<frozen importlib._bootstrap>", line 583 in module_from_spec
      File "<frozen importlib._bootstrap>", line 670 in _load_unlocked
      File "<frozen importlib._bootstrap>", line 967 in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 983 in _find_and_load
      File "<stdin>", line 1 in <module>
    Segmentation fault: 11

That disables linking OpenMP. I wanted to see if the link flags I added work or not.

See my patch above. I commented out some lines here and there. Do the same and try rebuilding and importing.

Ok, I have started over from scratch because I mis-diagnosed the problem. So, from the beginning : I made the edits that you suggested. I run cmake -DWITH_OPENMP=OFF -C
and it configures fine with no errors. But during the make install -j 4 step, I get the following,

[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/simple_pipeline/resect.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/simple_pipeline/tracks.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/brute_region_tracker.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/hybrid_region_tracker.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/klt_region_tracker.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/pyramid_region_tracker.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/retrack_region_tracker.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/track_region.cc.o
[  3%] Building CXX object intern/libmv/CMakeFiles/bf_intern_libmv.dir/libmv/tracking/trklt_region_tracker.cc.o
[  3%] Linking CXX static library ../../lib/libbf_intern_libmv.a
[  3%] Built target bf_intern_libmv
make: *** [Makefile:182: all] Error 2

the actual error is higher up, please look for it or build with -j 1

@Nabla Are you using Python installed from Homebrew?

Before I was not, but I am now.

I was able to successfully build the bpy module, with a caveat being that my site-packages directory is not located in the PYTHON_LIBPATH. So I located the directory where numpy resides and changed the PYTHON_NUMPY_INCLUDE_DIRS to /usr/local/lib/python${PYTHON_VERSION}/site-packages/numpy/core/include. No changes were made to PYTHON_LIBPATH.

As I said, the build was successful with no errors. But now when I run pip install bpy && bpy_post_install , I get the following error:

Processing ./bpy-2.91a0-cp37-cp37m-macosx_10_13_x86_64.whl
Requirement already satisfied: numpy in /usr/local/lib/python3.7/site-packages (from bpy==2.91a0) (1.19.4)
Installing collected packages: bpy
Successfully installed bpy-2.91a0
Traceback (most recent call last):
  File "/usr/local/bin/bpy_post_install", line 8, in <module>
    sys.exit(post_install())
  File "/usr/local/lib/python3.7/site-packages/blenderpy/post_install.py", line 47, in post_install
    install_scripts_directory()
  File "/usr/local/lib/python3.7/site-packages/blenderpy/post_install.py", line 43, in install_scripts_directory
    +blender_scripts_search_root_dir)
blenderpy.BlenderScriptsDirUnknownError: Could not find Blender scripts directory in /usr/local/opt

I see that this issue was brought up on Github.

For the record, I am performing this with the in system python. Mac OS is Catalina 10.15.7 and the output of sys.executable is /usr/local/opt/[email protected]/bin/python3.7.

If you could install Python 3.7.9 from Python.org then you would probably be able to use those instructions.