4

我有一个运行良好的 opencv 项目。今天我已将我的 OS X lion 升级到 Maverick,但 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 不再工作了。

您可以在下面看到我使用的 makefile:

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

3

-mmacosx-version-min=10.8我在使用 g++ 编译时使用该选项解决了这个问题。它可能不是一个永久的解决方案,但至少我的代码可以再次编译。

于 2013-10-29T15:25:07.643 回答
0

我敢打赌,你的图书馆错了。确保您使用 64 位库进行 64 位构建,调试库用于调试构建等。另一个常见原因是您的 opencv 版本是旧版本?2.3?如果你有最新的,那么它很可能是图书馆问题

也只是为了澄清一下, imread 和 imwrite 仅在调试或调试和发布中都不起作用?

希望我的回答对你有所帮助。如果还有问题,请告诉我。

于 2013-10-24T02:39:07.453 回答
0

正如杨在其中一条评论中提到的,问题来自于 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:我无法使用自制软件安装任何旧版本的opencv,你可以看到here

于 2013-10-30T00:14:23.400 回答