libopencv_features2d link failure on ARM with undefined references to cv::SIFT (Bug #910)
Description
When compiling for ARM (both cross and native), the test apps and external apps fail with:
| ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::SIFT' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::operator()(cv::Mat const&, cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&, cv::Mat&, bool) const' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::SIFT' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::CommonParams::CommonParams()' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::operator()(cv::Mat const&, cv::Mat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&) const' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::DescriptorParams::DescriptorParams()' | ../../lib/libopencv_features2d.so.2.2.0: undefined reference to @cv::SIFT::DetectorParams::DetectorParams()' | collect2: ld returned 1 exit status
This is with r4462 of the '2.2' branch. gcc 4.3.3, binutils 2.18.50 with ' -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp' as target CFLAGS
2.1 doesn't have this problem, trunk for a few weeks ago had the same problem
Associated revisions
Applying fix described in ticket #910. sift was not being built for arm...
Merge pull request #910 from pengx17:2.4_oclgfft
Merge remote-tracking branch 'origin/2.4'
Pull requests:
#943 from jet47:cuda-5.5-support
#944 from jet47:cmake-2.8.11-cuda-fix
#912 from SpecLad:contributing
#934 from SpecLad:parallel-for
#931 from jet47:gpu-test-fixes
#932 from bitwangyaoyao:2.4_fixBFM
#918 from bitwangyaoyao:2.4_samples
#924 from pengx17:2.4_arithm_fix
#925 from pengx17:2.4_canny_tmp_fix
#927 from bitwangyaoyao:2.4_perf
#930 from pengx17:2.4_haar_ext
#928 from apavlenko:bugfix_3027
#920 from asmorkalov:android_move
#910 from pengx17:2.4_oclgfft
#913 from janm399:2.4
#916 from bitwangyaoyao:2.4_fixPyrLK
#919 from abidrahmank:2.4
#923 from pengx17:2.4_macfix
Conflicts:
modules/calib3d/src/stereobm.cpp
modules/features2d/src/detectors.cpp
modules/gpu/src/error.cpp
modules/gpu/src/precomp.hpp
modules/imgproc/src/distransform.cpp
modules/imgproc/src/morph.cpp
modules/ocl/include/opencv2/ocl/ocl.hpp
modules/ocl/perf/perf_color.cpp
modules/ocl/perf/perf_imgproc.cpp
modules/ocl/perf/perf_match_template.cpp
modules/ocl/perf/precomp.cpp
modules/ocl/perf/precomp.hpp
modules/ocl/src/arithm.cpp
modules/ocl/src/canny.cpp
modules/ocl/src/filtering.cpp
modules/ocl/src/haar.cpp
modules/ocl/src/hog.cpp
modules/ocl/src/imgproc.cpp
modules/ocl/src/opencl/haarobjectdetect.cl
modules/ocl/src/pyrlk.cpp
modules/video/src/bgfg_gaussmix2.cpp
modules/video/src/lkpyramid.cpp
platforms/linux/scripts/cmake_arm_gnueabi_hardfp.sh
platforms/linux/scripts/cmake_arm_gnueabi_softfp.sh
platforms/scripts/ABI_compat_generator.py
samples/ocl/facedetect.cpp
History
Updated by Koen Kooi about 14 years ago
I get the feeling that:
opencv/modules/features2d/src/sift.cpp:
#ifdef arm
#define ARM_NO_SIFT
#endif
isn't working as you guys think it works
Updated by Koen Kooi about 14 years ago
ping
Updated by Koen Kooi about 14 years ago
ping again
Updated by Koen Kooi about 14 years ago
Any movement on this bug?
Updated by Koen Kooi about 14 years ago
and ping again
Updated by Koen Kooi about 14 years ago
I wonder why I bother to post patches here.....
Updated by Koen Kooi about 14 years ago
and another ping, this is getting tedious
Updated by Koen Kooi about 14 years ago
let's see if reassigning helps to move this bug along
- Status deleted (
Open)
Updated by Brian Gerkey about 14 years ago
Thanks for posting the patch. It fixed my build of https://code.ros.org/svn/opencv/branches/2.2/opencv@r4462 on a SheevaPlug.
Updated by Ethan Rublee about 14 years ago
So I hesitate to apply the patch, as I'm not sure the reason for the original non support for ARM with SIFT. It appears to not effect compilation on android, and that is why there is an android special case in there. Let's ask Vadim, and see why.
Also I noticed #772 mentions this #ifdef. Maybe its a completely unnecessary relic from the past.
Updated by Koen Kooi about 14 years ago
ping
Updated by Koen Kooi almost 14 years ago
ping
Updated by Koen Kooi almost 14 years ago
Ethan, could you please have a look at this again as Vadim is obviously ignoring trac tickets? This is a simple fix to make non-android ARM builds work again. It doesn't even impact android/arm since that's covered with the extra #ifdefs in the code and in the Cmakefiles. The reason non-android ARM is broken is due to the CMakefiles not being updated.
With my Texas Instruments hat on, openCV 2.2 is an integral part of the SDK we are going to release for our Integra line of chips and right now we can't ship it since upstream is broken. The way that is broken is also making this works, since openCV 2.2 builds fine, but you can't link anything to it since the SIFT symbols are not really there.
With my opensource hat on, I know reviewing patches is dull, but this is a 4 line change, confirmed to work by Gerkey (thanks!). Does it really need more than 3 weeks to give at least a "I'm looking at it" response?
Updated by Ethan Rublee almost 14 years ago
koenkooi, I will fix this right now at the risk of it breaking something else. It looks fine to me.
Updated by Ethan Rublee almost 14 years ago
Fixed in the 2.2 branch in r4812 and trunk in r4813. Please ping back if it works for you.
Updated by Koen Kooi almost 14 years ago
I tested 2.2/4812 and that builds and works, thanks!
- Status set to Done
- (deleted custom field) set to fixed