4

私は正常に動作していたopencvプロジェクトを持っていました。今日、OS X ライオンをマーベリックにアップグレードしましたが、imwrite 関数で次のエラーが発生します。

Undefined symbols for architecture x86_64:
  "cv::imwrite(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, cv::_InputArray const&, std::__1::vector<int, std::__1::allocator<int> > const&)", referenced from:
      _main in Hello.o
ld: symbol(s) not found for architecture x86_64

他の opencv 関数 (cvWaitKey()、cvShowImage など) はまだ機能していますが、imwrite と imread は機能しません。

私が使用しているメイクファイルは次のとおりです。

CXX = g++
CXXFLAGS = -O2 -g -Wall -fmessage-length=0 
CPPFLAGS = -I/usr/local/Cellar/opencv/2.4.6.1/include

OBJS =      Hello.o

LDFLAGS = -L/usr/local/Cellar/opencv/2.4.6.1/lib
LDLIBS =  -lopencv_core -lopencv_imgproc -lopencv_calib3d -lopencv_video \
          -lopencv_features2d -lopencv_ml -lopencv_highgui -lopencv_objdetect \
          -lopencv_contrib -lopencv_legacy -lopencv_gpu

TARGET =    Hello

.PHONY: all
all: $(TARGET)
$(TARGET):  $(OBJS)
         $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

.PHONY: clean
clean:
        rm -f $(OBJS) $(TARGET)

解決策: opencv 2.4.3 をインストールして問題を解決しました。私が追加した回答に詳細が記載されている場合があります。

4

3 に答える 3

0

私の賭けは、あなたのライブラリが間違っているということです。64 ビット ビルドには 64 ビット ライブラリ、デバッグ ビルドにはデバッグ ライブラリなどを使用していることを確認してください。もう 1 つの一般的な理由は、opencv のバージョンが古いことですか? 2.3? 最新のものをお持ちの場合、ライブラリの問題である可能性が最も高いです

また、明確にするために、 imread と imwrite はデバッグでのみ、またはデバッグとリリースの両方で機能しませんか?

私の答えがお役に立てば幸いです。まだ問題がある場合はお知らせください。

于 2013-10-24T02:39:07.453 に答える
0

コメントの 1 つでヤンが述べたように、問題は opencv 2.4.6.1 に由来します。以下を実行してCmakeインストーラーを使用してopencv 2.4.3をインストールしましたが、動作します。

tar -xf opencv-2.4.3.tar.gz
cd opencv-2.4.3
echo "#define GTEST_USE_OWN_TR1_TUPLE 1" | cat > temp1
cat modules/ts/include/opencv2/ts/ts_gtest.h > temp2
cat temp1 temp2 > modules/ts/include/opencv2/ts/ts_gtest.h
mkdir build
cd build
cmake .. -Wno-dev
make -j8 && sudo make install

PS: homebrew を使用して古いバージョンの opencv をインストールできませんでした。

于 2013-10-30T00:14:23.400 に答える