Hello, I try to bind C++ OpenCV version to understand how to made it. So I 
created a little "useless" Nim file:
    
    
    {.passc: "-I/mnt/c/OpenCVNim/extern/opencv-install/include/opencv4", link: 
"/mnt/c/OpenCVNim/extern/opencv-install/lib/libopencv_world.so".}
    
    const
        mat = "<opencv2/core/mat.hpp>"
        imgcodecs = "<opencv2/imgcodecs.hpp>"
    
    type
        Mat {.importcpp: "cv::Mat", header: mat.} = object
        ImreadModes = enum
            IMREAD_UNCHANGED = -1,      ## !< If set, return the loaded image 
as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.
            IMREAD_GRAYSCALE = 0,       ## !< If set, always convert image to 
the single channel grayscale image (codec internal conversion).
            IMREAD_COLOR = 1,           ## !< If set, always convert image to 
the 3 channel BGR color image.
            IMREAD_ANYDEPTH = 2,        ## !< If set, return 16-bit/32-bit 
image when the input has the corresponding depth, otherwise convert it to 8-bit.
            IMREAD_ANYCOLOR = 4,        ## !< If set, the image is read in any 
possible color format.
            IMREAD_LOAD_GDAL = 8,       ## !< If set, use the gdal driver for 
loading the image.
            IMREAD_REDUCED_GRAYSCALE_2 = 16, ## !< If set, always convert image 
to the single channel grayscale image and the image size reduced 1/2.
            IMREAD_REDUCED_COLOR_2 = 17, ## !< If set, always convert image to 
the 3 channel BGR color image and the image size reduced 1/2.
            IMREAD_REDUCED_GRAYSCALE_4 = 32, ## !< If set, always convert image 
to the single channel grayscale image and the image size reduced 1/4.
            IMREAD_REDUCED_COLOR_4 = 33, ## !< If set, always convert image to 
the 3 channel BGR color image and the image size reduced 1/4.
            IMREAD_REDUCED_GRAYSCALE_8 = 64, ## !< If set, always convert image 
to the single channel grayscale image and the image size reduced 1/8.
            IMREAD_REDUCED_COLOR_8 = 65, ## !< If set, always convert image to 
the 3 channel BGR color image and the image size reduced 1/8.
            IMREAD_IGNORE_ORIENTATION = 128
    
    
    proc imread(file: cstring, mode: ImreadModes): Mat {.importcpp: 
"cv::imread(@)", header: imgcodecs.}
    proc imwrite(file: cstring, mat : Mat): bool  {.importcpp: 
"cv::imwrite(@)", header: imgcodecs.}
    
    when isMainModule:
        var
            imagePath : cstring = 
"/mnt/c/OpenCVNim/extern/opencv-4.5.5/samples/data/box.png"
            img = imread(imagePath, IMREAD_COLOR);
        
        discard imwrite("/mnt/c/OpenCVNim/extern/test.jpg", img)
    
    
    Run

It seems pretty simple but I have a link error:
    
    
    Verifying dependencies for [email protected]
          Info: Dependency on cppstl@any version already satisfied
      Verifying dependencies for [email protected]
       Building OpenCVNim/OpenCVNim using cpp backend
    /usr/bin/ld: /home/echopouet/.cache/nim/OpenCVNim_d/@mOpenCVNim.nim.cpp.o: 
in function `NimMainModule()':
    @mOpenCVNim.nim.cpp:(.text+0x26f): undefined reference to 
`cv::imread(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, int)'
    /usr/bin/ld: @mOpenCVNim.nim.cpp:(.text+0x282): undefined reference to 
`cv::Mat::operator=(cv::Mat&&)'
    /usr/bin/ld: @mOpenCVNim.nim.cpp:(.text+0x28e): undefined reference to 
`cv::Mat::~Mat()'
    /usr/bin/ld: @mOpenCVNim.nim.cpp:(.text+0x351): undefined reference to 
`cv::imwrite(std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > const&, cv::_InputArray const&, std::vector<int, 
std::allocator<int> > const&)'
    /usr/bin/ld: @mOpenCVNim.nim.cpp:(.text+0x3bb): undefined reference to 
`cv::Mat::~Mat()'
    /usr/bin/ld: /home/echopouet/.cache/nim/OpenCVNim_d/@mOpenCVNim.nim.cpp.o: 
in function `__static_initialization_and_destruction_0(int, int)':
    @mOpenCVNim.nim.cpp:(.text+0x486): undefined reference to `cv::Mat::Mat()'
    /usr/bin/ld: @mOpenCVNim.nim.cpp:(.text+0x49b): undefined reference to 
`cv::Mat::~Mat()'
    collect2: error: ld returned 1 exit status
    Error: execution of an external program failed: 'g++   -o 
/mnt/c/OpenCVNim/OpenCVNim  
/mnt/c/OpenCVNim/extern/opencv-install/lib/libopencv_world.so 
/home/echopouet/.cache/nim/OpenCVNim_d/stdlib_digitsutils.nim.cpp.o 
/home/echopouet/.cache/nim/OpenCVNim_d/stdlib_dollars.nim.cpp.o 
/home/echopouet/.cache/nim/OpenCVNim_d/stdlib_system.nim.cpp.o 
/home/echopouet/.cache/nim/OpenCVNim_d/@mOpenCVNim.nim.cpp.o    -ldl'
           Tip: 3 messages have been suppressed, use --verbose to show them.
         Error: Build failed for package: OpenCVNim
            ... Execution failed with exit code 1
            ... Command: /home/echopouet/.nimble/bin/nim cpp --colors:on 
--noNimblePath -d:NimblePkgVersion=0.1.0 
--path:/home/echopouet/.nimble/pkgs/cppstl-0.5.0 --hints:off 
-o:/mnt/c/OpenCVNim/bin/OpenCVNim /mnt/c/OpenCVNim/src/OpenCVNim.nim
    
    
    Run

I link with **libopencv_world.so** that contains all so I don't undertstand why 
all are missing. I certainly missed something.

Thanks.

Reply via email to