【问题标题】:Undefined reference when using Cmake and QtCreator使用 Cmake 和 QtCreator 时未定义的引用
【发布时间】:2014-03-30 05:11:00
【问题描述】:

我正在使用 OpenCV3.0.0 dev 运行基本的 OpenCV 示例:

project(ImageDenoise)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)

find_package(OpenCV REQUIRED)
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})

MESSAGE(${OpenCV_LIBS})
MESSAGE(${OpenCV_INCLUDE_DIRS})

源代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main(int argc, char* argv[] )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread( argv[1], IMREAD_COLOR );

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}

当我将此项目导入 QtCreator 时,在构建项目时出现以下链接错误:

[100%] Building CXX object CMakeFiles/ImageDenoise.dir/main.cpp.o
Linking CXX executable ImageDenoise
CMakeFiles/ImageDenoise.dir/main.cpp.o: In function `main':
main.cpp:(.text+0x7c): undefined reference to `cv::imread(cv::String const&, int)'
main.cpp:(.text+0xf5): undefined reference to `cv::namedWindow(cv::String const&, int)'
main.cpp:(.text+0x144): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'

但是,当我从命令行运行 cmake 并使用 make 时,它​​可以完美运行。这背后的原因是什么?

dzung@Cronus:~/kSVD/build$ make
Scanning dependencies of target ImageDenoise
[100%] Building CXX object CMakeFiles/ImageDenoise.dir/main.cpp.o
Linking CXX executable ImageDenoise
[100%] Built target ImageDenoise
dzung@Cronus:~/kSVD/build$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  ImageDenoise  Makefile
dzung@Cronus:~/kSVD/build$ ./ImageDenoise 
usage: DisplayImage.out <Image_Path>

【问题讨论】:

  • 默认情况下,链接器只扫描一次库列表——因此依赖关系很重要(这意味着规范的顺序)很重要。我猜在一种情况下,发送到链接器的库的顺序是不同的。 “为什么?”将是下一个问题,无能为力...:)
  • 尝试使用make VERBOSE=1获取实际链接命令

标签: c++ cmake qt-creator


【解决方案1】:

我遇到了完全相同的问题。我认为这是某种 Qt-creator 错误。

我通过以下方式解决了这个问题:

  1. 删除项目中除 *.cpp 和 CMakeLists.txt 之外的所有内容 文件夹。
  2. 在使用 Qt-creator 创建任何东西之前,请执行以下操作:cmake . &amp;&amp; make
  3. 现在在 Qt-creator 中打开现有项目。
  4. 现在您可以正常运行 cmake/compile/run 等了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2014-07-13
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多