Ask Your Question

Revision history [back]

Compiling a node addon w/ opencv on OS X and Heroku

I'm having an issue compiling a node add on with opencv on os x and heroku. however, on ubuntu it works fine.

I'm using the vagrant file:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :shell, :inline => $BOOTSTRAP_SCRIPT # see below
end

$BOOTSTRAP_SCRIPT = <<EOF
  set -e # Stop on any error

  # Make vagrant automatically go to /vagrant when we ssh in.
  echo "cd /vagrant" | sudo tee -a ~vagrant/.profile

  sudo apt-get update -y
  sudo apt-get install -y build-essential python g++ make curl git
  sudo apt-get install -y libopencv-dev libeigen3-dev

  curl http://nodejs.org/dist/v0.10.35/node-v0.10.35-linux-x64.tar.gz | \
    tar -C /usr/local/ --strip-components=1 -xvz; \
    npm update -g npm

  echo VAGRANT IS READY.
EOF

I have a binding.gyp file:

    {
      "targets": [{
        "target_name": "module",
        "sources": [
          "node_src/module.cc",
          "src/Candidate.cpp",
          "src/Image.cpp",
          "src/LearnerEngine.cpp",
          "src/ShaheenTracker.cpp"
        ],
        'libraries': [
          '<!@(pkg-config --libs opencv)'
        ],
        'include_dirs': [
          'include/',
          "<!(node -e \"require('nan')\")"
        ],
        'cflags': [
          '<!@(pkg-config --cflags "opencv <= 3.0.0" )', '-std=c++11', '-Wall', '-fPIC'
        ],
        'cflags!': ['-fno-exceptions'],
        'cflags_cc!': ['-fPIC', '-fno-rtti', '-fno-exceptions', '--enable-auto-import'],
        "conditions": [
          ['OS=="mac"', {
            'xcode_settings': {
              'OTHER_CFLAGS': [
                "-mmacosx-version-min=10.7",
                "-std=c++11",
                "-stdlib=libc++",
                '<!@(pkg-config --cflags opencv)'
              ],
              "GCC_ENABLE_CPP_RTTI": "YES",
              "GCC_ENABLE_CPP_EXCEPTIONS": "YES"
            }
          }]
        ]
      }]
    }

On OS X, I can compile with npm i fine. However, I can't run it as I get the following error:

1): Symbol not found: __ZNK2cv11_InputArray12getMatVectorERNSt3__16vectorINS_3MatENS1_9allocatorIS3_EEEE

On Heroku, I am using https://github.com/ddollar/heroku-buildpack-apt to get the packages and have the following Aptfile:

libeigen3-dev
libopencv-dev

However, I get the following error:

remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_contrib.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_core.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_features2d.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_flann.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_gpu.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_highgui.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_legacy.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_ml.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_ocl.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_photo.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_stitching.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_superres.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_ts.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_video.so: No such file or directory
remote:        g++: error: /usr/lib/x86_64-linux-gnu/libopencv_videostab.so: No such file or directory

I think that's a pkg-config issue.

What am I doing wrong? also asked here if you want some bounty: http://stackoverflow.com/questions/27852961/compiling-a-node-addon-w-opencv-on-os-x-and-heroku