4

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

架构 x86_64 的未定义符号:

“_cvLoadImage”,引用自:

test.cpp.o 中的 _main

ld:未找到架构 x86_64 的符号

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

ccmake ../源代码

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

. . .

“QWidget 的 typeinfo”,引用自:SoQtThumbWheelin SoQtThumbWheel.o 的 typeinfo “QWidget::staticMetaObject”,引用自:SoQtThumbWheel.o 中的 SoQtThumbWheel::staticMetaObject

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 位(?)编译。我发现了一个有趣的链接。但我想知道如何将其应用于 CMake。

请问有什么帮助吗?

谢谢。

4

2 回答 2

4

这看起来像您没有正确链接到库。stackoverflow 上至少有两个类似的问题可以解决这个问题,即this onethat one。你看过他们吗?此外,请提供有关您如何编译的更多信息。你能编译一个简单的 OpenCV 测试程序,比如这个(取自他们的 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;
}
于 2012-05-23T18:44:48.487 回答
1

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

具体来说,我选择了正确的:

target_link_libraries(
GradientComputer
)

target_link_libraries(
Overlap
PointAreaComputer
)

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

target_link_libraries(
GradientComputer
Overlap
PointAreaComputer
)
于 2016-03-17T14:21:00.307 回答