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