【问题标题】:Linking OpenCV 2.3 program in Mac OS X Lion: symbol(s) not found for architecture x86_64在 Mac OS X Lion 中链接 OpenCV 2.3 程序:未找到架构 x86_64 的符号
【发布时间】:2011-12-16 03:06:26
【问题描述】:

我在尝试从 OpenCV 2.3 官方文档中编译 this tutorial 中的程序时遇到问题。我已经创建了 CMakeList.txt,就像链接中所说的那样。好吧,它没有用。

在谷歌搜索并尝试修复它之后,我已将正确的库和包含文件夹添加到 OpenCVConfig.make(在 /opt/local/share/opencv 此处)。好吧,这是我尝试制作时的输出:

$ cmake .
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/carlosagarie/dropbox/code/c++/opencv

$ make
Linking CXX executable teste
Undefined symbols for architecture x86_64:
  "cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:
      _main in teste.cc.o
  "cv::imshow(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, cv::_InputArray const&)", referenced from:
      _main in teste.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make[2]: *** [teste] Error 1
make[1]: *** [CMakeFiles/teste.dir/all] Error 2
make: *** [all] Error 2

试图找出为什么它说 ld: symbol(s) not found for architecture x86_64,我查看了我的库文件夹 (/opt/local/lib) 并使用了文件命令:

libopencv_calib3d.2.2.0.dylib:    Mach-O 64-bit dynamically linked shared library x86_64

所有其他库都相同。所以,我认为这不是他们的问题。但是,为什么 ld 不工作呢?我真的不知道该怎么办。

代码与前面介绍的教程中的代码相同。我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 2.8)
project( teste )
find_package( OpenCV REQUIRED )
add_executable( teste teste )
target_link_libraries( teste ${OpenCV_LIBS} )

提前致谢!

【问题讨论】:

    标签: opencv cmake x86-64 ld


    【解决方案1】:

    我注意到您正在遵循 2.3.x 指南,但链接错误指的是 2.2.0。你用的是哪个版本?

    你试过手动编译吗?

    这样的:

    假设 OPENCV_ROOT 设置为您的安装位置(例如,/opt/local)

    g++ -I$OPENCV_ROOT/include -L$OPENCV_ROOT/lib -lopencv_core2.2.0 -lopencv_calib3d2.2.0 -c test.cpp
    

    如果这不起作用,您是否尝试过以 root 身份运行 ldconfig?是否在/etc/ld.so.conf 中设置了opencv 库的安装位置(如果没有,您需要首先ldconfig 做任何有用的事情之前这样做)?

    编辑您的答案并更新这些问题。并且,我会尽力帮助您完成其余的工作。

    编辑:
    您也可以尝试将此添加到您的 ~/.profile 并查看它是否修复它:

    export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib
    

    您是否尝试过使用 XCode 从第 2 节开始关注此 guide

    【讨论】:

    • 我尝试使用g++ -I/include -L/opt/local/lib -lopencv_core -lopencv_highgui teste.cc -o teste 编译它,错误是一样的,“架构x86_64 的未定义符号”。我使用的是 Mac,所以没有 ldconfig 实用程序,也没有 /etc/ld.so.conf 文件。我正在考虑重新安装 - 删除所有 .dylibs 和包含的东西就足够了吗?或者还有其他文件需要我处理吗?非常感谢您的帮助。
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2012-04-26
    • 2017-08-21
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多