3

を使用して、Lion を実行している Macbook で OpenCV の i386 フレーバーをローカルにビルドしました。

cmake -G "Unix Makefiles" -D CMAKE_OSX_ARCHITECTURES=i386 -D CMAKE_C_FLAGS=-m32 -D CMAKE_CXX_FLAGS=-m32 ..
make -j8
sudo make install

ライブラリは正常にビルドおよび公開され、xcode プロジェクトに追加しました。ただし、テスト アプリのビルド時にリンク エラーが発生し、名前マングリングの問題のようです。

Undefined symbols for architecture i386: "cv::namedWindow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: _main in main.o "cv::imread(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: _main in main.o "cv::imshow(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&)", referenced from: _main in main.o

cv::imread を例にとると、libopencv_highgui.dylib から次の名前でエクスポートされます。

00007510 (__TEXT,__text) external __ZN2cv6imreadERKSsi 

main.o がシンボルを参照している間

U __ZN2cv6imreadERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEi

一方、__ZN2cv7waitKeyEi同じ dylib リンクからの関数は問題ありません。

テスト アプリとフレームワークの両方が i386 arch 用です。

この問題を引き起こしている可能性のあるアイデアはありますか?

4

2 に答える 2

2

私は同じ問題を抱えていました。問題は、MacPortsを使用して OpenCV ライブラリをコンパイルした場合、おそらくPortfileに従って GCC によってビルドされた可能性があると思います。XCode (Apple LLVM 4.1) で使用されているコンパイラを LLVM GCC 4.2 に切り替えたところ、動作するようになりました。

それが役に立てば幸い。

于 2012-11-22T10:00:28.080 に答える
0

同じ問題が発生し、C++ 標準ライブラリとして libstdc++ を使用して修正しました。デフォルトで libc++ に設定されていました

プロジェクトのビルド設定の下 -> APPLE LLVM コンパイラ 4.2 - 言語 -> C++ 標準ライブラリ

于 2013-08-17T03:14:35.210 に答える