mingw32-сделать неопределенную ссылку на `cv :: imread (cv :: String const &, int) 'OPENCV - PullRequest
0 голосов
/ 16 апреля 2019

Итак, у меня есть библиотеки OpenCV, загруженные отсюда https://sourceforge.net/projects/opencvlibrary/files/3.4.6/opencv-3.4.6-vc14_vc15.exe/download

CMake gui с cmakelist.txt вот так

cmake_minimum_required (ВЕРСИЯ 2.8)

project (Display)

find_package (OpenCV REQUIRED)

сообщение (STATUS "Состояние библиотеки OpenCV:") сообщение (STATUS "config: $ {OpenCV_DIR}") сообщение (STATUS "
version: $ {OpenCV_VERSION} ") сообщение (STATUS" библиотеки: $ {OpenCV_LIBS} ") сообщение (STATUS"
include path: $ {OpenCV_INCLUDE_DIRS} ")

add_executable (Display DisplayImage.cpp)

target_link_libraries (Показать $ {OpenCV_LIBS})

и иметь простой cpp, подобный этому

#include <stdio.h>
#include <iostream>
#include <opencv2/opencv.hpp>


using namespace std;
using namespace cv;

int main(int argc, char** argv )
{
    // cout << "You have entered " << argc 
 //         << " arguments:" << "\n";

 //        for (int i = 0; i < argc; ++i) 
 //         cout << argv[i] << "\n"; 

 //        cout << "a" << argv[1];
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

    Mat image;
    image = imread( argv[1], 1 );

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

    waitKey(0);
    printf("Hello World!");
    return 0;
}

, уже настроив его с помощью cmake-gui, и это отображается

Состояние библиотеки OpenCV: конфиг: D: / opencv / build / x64 / vc15 / lib версия: 3.4.6 библиотеки: opencv_calib3d; opencv_core; opencv_dnn; opencv_features2d; opencv_flann; opencv_highci; код opencv;opencv_ml; opencv_objdetect; opencv_photo; открытаяcv_shape; opencv_stitching; opencv_superres; opencv_video; opencv_videoio; opencv_videostab; opencv_world include path: D: / opencv / build / include; D: / opencv / build / include / opencv; D: / opencv / build / include / donec2

кажется хорошим, верно?а затем в каталоге сборки из командной строки я набрал mingw32-make, и это показывает

CMakeFiles \ Display.dir / objects.a (DisplayImage.cpp.obj): DisplayImage.cpp :(.text + 0x72): неопределенная ссылка на cv::imread(cv::String const&, int)' CMakeFiles\Display.dir/objects.a(DisplayImage.cpp.obj):DisplayImage.cpp:(.text+0xe3): undefined reference to cv :: namedWindow (cv :: String const &, int) 'CMakeFiles \ Display.dir / objects.a (DisplayImage.cpp.obj): DisplayImage.cpp :(. text+ 0x129): неопределенная ссылка на cv::imshow(cv::String const&, cv::_InputArray const&)' CMakeFiles\Display.dir/objects.a(DisplayImage.cpp.obj):DisplayImage.cpp:(.text+0x149): undefined reference to cv :: waitKey (int) 'CMakeFiles \ Display.dir / objects.a (DisplayImage.cpp.obj): DisplayImage.cpp :(. Text $ _ZN2cv6StringC1EPKc [__ ZN2cv6StringC1EPKc] + 0x42): неопределенная ссылка на cv::String::allocate(unsigned int)' CMakeFiles\Display.dir/objects.a(DisplayImage.cpp.obj):DisplayImage.cpp:(.text$_ZN2cv6StringD1Ev[__ZN2cv6StringD1Ev]+0xf): undefined reference to cv :: String :: deallocate () 'CMakeFiles \ Display.dir / objects.a (DisplayImage.cpp.obj): DisplayImage.cpp :(. text $ ZN2cv6StringaSERKS0 [__ZN2cv6StringaSERKS0 _] + 0x1c): неопределенная ссылка на cv::String::deallocate()' CMakeFiles\Display.dir/objects.a(DisplayImage.cpp.obj):DisplayImage.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x2d): undefined reference to cv :: fastFree (void *) 'CMakeFiles \ Display.dir / objects.a (DisplayImage.cpp.obj): DisplayImage.cpp :(. Text $ _ZN2cv3Mat7releaseEvEvEv] [v3].+ 0x40): неопределенная ссылка на cv::Mat::deallocate()' CMakeFiles\Display.dir/objects.a(DisplayImage.cpp.obj):DisplayImage.cpp:(.text$_ZN2cv3MataSEOS0_[__ZN2cv3MataSEOS0_]+0xb4): undefined reference to cv :: fastFree (void *) 'collect2.exe: ошибка: ld вернул 1 состояние выхода mingw32-make [2]: * [CMakeFiles \ Display.dir \ build.make: 104: Display.exe] Ошибка 1 mingw32-make [1]: * [CMakeFiles \ Makefile2: 72: CMakeFiles /Display.dir / all] Ошибка 2 mingw32-make: *** [Makefile: 83: all] Ошибка 2

Как мне это исправить?или это потому, что я использую библиотеку прямо с сайта?я также пытаюсь что-то наподобие ввода неправильного параметра в функцию imread, а затем набираю mingw32-make, и это говорит мне, что я использую неправильный параметр.Если они знают, что я использовал неправильный параметр, то почему они не могут сказать, для чего imread (или почему это неопределенная ссылка?)?Я использую windows.

Я очень плохо знаком с этими библиотеками, mingw и cmake, поэтому извините, если мой вопрос глупый.

этот вопрос не повторяется, потому что,я использую windows и mingw32-make, все, кто задает этот вопрос, не использовали его, и этот вопрос находится в другой ситуации, чем у меня.

...