3

iOS用のOpenCVの修正版を使用するiPhoneアプリにC++静的ライブラリを使用しようとしていますが、リンク時にこの問題に悩まされています:

Undefined symbols for architecture armv7:
  "___sincos_stret", referenced from:
      cv::initInterTab2D(int, bool) in opencv2(imgwarp.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

私が欠けているものを本当に理解していません.その機能はOpenCVに存在していないようで、Web上で意味のあるものは何も見つかりません; 数学ライブラリにあるかどうか疑問に思っていますが、まだ何も見つかりませんでした。

OpenCV を Clang でコンパイルし、デフォルトの libc++ ライブラリを使用しました。

libmylibrary.a と OpenCV2 フレームワークは、リンクされたライブラリのリストに正しく含まれています。

私は XCode を初めて使用するので、静的ライブラリのコンパイルおよび/またはプロジェクトへのリンクで些細なことを見落としていた可能性があります。

私の変更は OpenCV の imgproc モジュールの別の部分に関連していたため、そのオブジェクトのソース コードは変更していません。したがって、デフォルト バージョンを使用していても、これが発生した可能性があると思います。

手がかりはありますか?

4

4 に答える 4

4

Xcode 5 ツールチェーンでこの問題を修正するために、Xcode の構成と一致するように、サポートされる最小の iOS バージョンをコンパイラ オプションとして指定しました。例えば:

-miphoneos-version-min=5.0

これをmakefileのCおよびCXXフラグに追加できます

CFLAGS += -miphoneos-version-min=5.0
CXXFLAGS += -miphoneos-version-min=5.0
于 2013-09-12T16:50:45.847 に答える
3

以前のバージョンの XCode でビルドしたくない場合は、OpenCV iOS の python ビルド スクリプトを変更してみてください。build_framework.py にIPHONEOS_DEPLOYMENT_TARGET=6.0行を追加し、OpenCV for iOS を再構築しました。

os.system("xcodebuild -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
os.system("xcodebuild ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))

取得するため

os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 -parallelizeTargets ARCHS=%s -jobs 8 -sdk %s -configuration Release -target ALL_BUILD" % (arch, target.lower()))
os.system("xcodebuild IPHONEOS_DEPLOYMENT_TARGET=6.0 ARCHS=%s -sdk %s -configuration Release -target install install" % (arch, target.lower()))

私にとっては、問題は解決しました。シンボル__sincos_stretに関する読み物

TODO: これで問題は解決しましたが、Python スクリプトから生成された OpenCV.xcodeproj (ビルド フォルダー内) には、まだ iOS 7.0 としてデプロイ ターゲットがあります。もっときれいな方法があるかもしれません。

于 2013-10-31T05:05:51.823 に答える
0

他の場所で Adam の質問をサポートするクイック検索によると、シンボルは で定義されてい[path to SDK]/usr/lib/system/libsystem_m.dylibます。証拠:

nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos

古いバージョンのツールや SDK に固執するのではなく、それに対してリンクしていることを確認してください。

于 2013-09-26T00:21:53.410 に答える