【问题标题】:symbol(s) not found for architecture x86_64 os x lion未找到架构 x86_64 os x lion 的符号
【发布时间】:2012-05-30 07:40:37
【问题描述】:

当尝试使用 opencv 2.3.1 作为第三个编译简单的 c++ test.cpp 代码时 库,我收到以下错误消息:

架构 x86_64 的未定义符号:

“_cvLoadImage”,引用自: test.cpp.o 中的 _main ld:未找到架构 x86_64 的符号

有关信息,我正在使用 CMake 进行链接,以及 gcc 4.2.1 i686-apple-darwin11 从 Xcode 4.2 获得。 OpenCV 已使用 CMake 安装:

ccmake ../源代码

请注意,我在尝试编译 SoQt 时收到了类似的消息 (coin3D),在命令 ./configure & sudo make 之后:

。 . .

“QWidget 的类型信息”,引用自: SoQtThumbWheel 的类型信息 SoQtThumbWheel.o “QWidget::staticMetaObject”,引用自: SoQtThumbWheel::staticMetaObject 在 SoQtThumbWheel.o ld:未找到架构 x86_64 的符号 collect2: ld 返回 1 个退出状态

主工程的CMakeLists.txt为:

cmake_minimum_required(VERSION 2.8)    
PROJECT(TOTO )

FIND_PACKAGE(OpenCV)

INCLUDE_DIRECTORIES(${TOTO_SOURCE_DIR}/src/control)

SET(ALL_LIB_RAF  ${OPENCV_LIBRARIES}             
         Hello
          )

# FILEs to consider
ADD_SUBDIRECTORY(main) 
ADD_SUBDIRECTORY( src )

而 test.cpp 的 CMakeLists.txt 是:

ADD_EXECUTABLE(helloWorld test)
TARGET_LINK_LIBRARIES(helloWorld ${ALL_LIB_RAF} )

也许问题在于 OpenCV 需要以 64 位 (?) 编译。我发现了一个有趣的link。但我想知道如何将其应用于 CMake。

有什么帮助吗?

谢谢。

【问题讨论】:

    标签: c++ macos compilation linker cmake


    【解决方案1】:

    这看起来您没有正确链接库。 stackoverflow 上至少有两个类似的问题可以解决这个问题,即this onethat one。你看过他们吗?此外,请提供有关如何您正在编译的更多信息。你能编译一个像这个这样的简单OpenCV测试程序吗(取自their wiki):

    #include <cv.h>
    #include <highgui.h>
    
    int main ( int argc, char **argv )
    {
      cvNamedWindow( "My Window", 1 );
      IplImage *img = cvCreateImage( cvSize( 640, 480 ), IPL_DEPTH_8U, 1 );
      CvFont font;
      double hScale = 1.0;
      double vScale = 1.0;
      int lineWidth = 1;
      cvInitFont( &font, CV_FONT_HERSHEY_SIMPLEX | CV_FONT_ITALIC,
                  hScale, vScale, 0, lineWidth );
      cvPutText( img, "Hello World!", cvPoint( 200, 400 ), &font,
                 cvScalar( 255, 255, 0 ) );
      cvShowImage( "My Window", img );
      cvWaitKey();
      return 0;
    }
    

    【讨论】:

    • 感谢您的回复。 您的代码也无法编译。我看到了这两个链接。问题是我与 CMake 链接。 我想我需要用 64 位重新编译 opencv。请问您知道我们如何使用 CMake 做到这一点吗?即,要指定哪些标志?
    • 我找到了这个有用的链接 (stackoverflow.com/questions/5781198/…) 但我没有找到如何将它应用到 CMake
    • @polar 请在您的原始问题中添加更多详细信息。您是如何尝试编译示例代码的? stackoverflow 需要更多详细信息才能为您提供帮助。
    • 编译和创建构建:ccmake ../project-source。我没有碰任何旗帜。
    • @polar 你想如何用这个命令编译上面的例子?没有CMakeLists.txt...
    【解决方案2】:

    当我在使用 cmake 编译时不小心在我的 CMakeLists.txt 文件中组合了单独的 target_link_libraries() 时产生了这个错误。

    具体来说,我选对了:

    target_link_libraries(
    GradientComputer
    )
    
    target_link_libraries(
    Overlap
    PointAreaComputer
    )
    

    并将它们组合起来创建不正确的:

    target_link_libraries(
    GradientComputer
    Overlap
    PointAreaComputer
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 2011-12-16
      • 2012-12-17
      • 1970-01-01
      • 2012-04-26
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多