shahzaib
shahzaib

Reputation: 75

Error while compiling iOS app with openCV framework on real device

With latest open cv framework i am unable to compile code on IOS device. i am facing following error.

Undefined symbols for architecture arm64: "_png_init_filter_functions_neon", referenced from: _png_read_filter_row in opencv2(pngrutil.o) ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Same app is able to compile for simulator but not for ios devices. Can any one tell me why i am facing this problem. Thanks in advance.

Upvotes: 6

Views: 5478

Answers (3)

Mahmud Ahsan
Mahmud Ahsan

Reputation: 2055

I faced the same problem as @shahzaib described. In simulator it works but in iPhone its not working and showing the same error.

Previously I manually added OpenCV 3.1 in my iOS project. Later I changed it and install the OpenCV library via cocoapod https://cocoapods.org/pods/OpenCV

And in cocoapod there is 3.1.0.1 version which fixed the issue.

  pod 'OpenCV', '~> 3.1.0.1'

Upvotes: 1

leander
leander

Reputation: 8737

It appears that this commit fixes the issue, while still keeping NEON support for iOS devices:

https://github.com/opencv/opencv/commit/262a52f3063c50fbb1236e2cba2bd3c68f9979bb

Essentially, the clause that appends -DENABLE_NEON=ON to the cmake line was only applying to architectures beginning with "armv" (note the "v"); the above commit changes opencv/platforms/ios/build_framework.py to allow the cmake command to work with "arm64" as well.

Before:

    if arch.startswith("armv"):
        cmakecmd.append("-DENABLE_NEON=ON")

After:

    if arch.startswith("armv") or arch.startswith("arm64"):
        cmakecmd.append("-DENABLE_NEON=ON")

Diagnostic process, since it might be useful:

Found this by starting a script build.log before invoking python ../opencv/platforms/ios/build_framework.py ios and digging through output; arm_init.c was not built for arm64 (which is where png_init_filter_functions_neon was defined) but was for armv7 and armv7s. From there, looking through 3rdparty/libpng/CMakeLists.txt pointed at ENABLE_NEON not being set.

Upvotes: 2

MLB
MLB

Reputation: 36

I had fixed this problem.The core of this problem is that we recompile some content in libpng,maybe it exits in other ios framework.Then it makes a conflict.Opncv 3.1 has 3rdparty in it's code.What you should do is find the lines 117-121 in libpng's pngpriv.h.Then just follow Iphone - device - linker error.

Upvotes: 2

Related Questions