没有为建筑x86_64 os x lion找到的符号

时间:2012-05-23 17:57:41

标签: c++ macos compilation linker cmake

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

  

架构x86_64的未定义符号:

   “_cvLoadImage”,引自:

       _main in test.cpp.o

  ld:找不到架构x86_64

的符号

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

ccmake ../sourcecode

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

  

。   。   。

  “QWidget的typeinfo”,引自:        SoQtThumbWheelin SoQtThumbWheel.o的typeinfo    “QWidget :: staticMetaObject”,引自:        SoQtThumbWheel中的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位(?)编译。我发现了一个有趣的link。但我想知道如何应用于CMake。

请帮忙吗?

感谢。

2 个答案:

答案 0 :(得分:4)

这看起来好像没有正确链接到库。 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;
}

答案 1 :(得分:1)

在使用cmake进行编译时,我在CMakeLists.txt文件中意外地将单独的target_link_libraries()组合在一起时生成了此错误。

具体来说,我采取了正确的方法:

target_link_libraries(
GradientComputer
)

target_link_libraries(
Overlap
PointAreaComputer
)

并将它们组合起来以创建错误:

target_link_libraries(
GradientComputer
Overlap
PointAreaComputer
)