Building G'MIC MSys2 (W64) error

What do I do here?

User@DESKTOP MINGW64 /c/pdn-gmic/gmic/src
# make OPENCV_CFLAGS="" OPENCV_LIBS="" lib
make "CFLAGS+=-Dgmic_build -Dcimg_date=\\\"\\\" -Dcimg_time=\\\"\\\" -Dcimg_use_zlib -I. -I/mingw64/include  -Dgmic_prerelease="\\\"201018\\\""  -std=c++11 -pedantic -Wall -Wextra -Wfatal-errors -Werror=unknown-pragmas -Werror=unused-label -Wshadow -Dcimg_use_abort -Dgmic_is_parallel  -Dcimg_use_fftw3 -I/mingw64/include  -Dcimg_use_curl -I/mingw64/include  -Dcimg_use_png -I/mingw64/include/libpng16 -I/mingw64/include  -Dcimg_use_jpeg -Dcimg_use_tiff -I/mingw64/include  -fopenmp -Dcimg_use_openmp -Dcimg_display=2 -O2" "LIBS+=-L/mingw64/lib -lz   -L/mingw64/lib -lm -Wl,--stack,16777216   -L/mingw64/lib -lfftw3  -L/mingw64/lib -lcurl  -L/mingw64/lib -lpng16 -lz  -ljpeg -L/mingw64/lib -ltiff  -lgomp -lgdi32 " _lib
make[1]: Entering directory '/c/pdn-gmic/gmic/src'
g++ -o libgmic.o -c gmic.cpp  -Dgmic_build -Dcimg_date=\"\" -Dcimg_time=\"\" -Dcimg_use_zlib -I. -I/mingw64/include  -Dgmic_prerelease=\"201018\"  -std=c++11 -pedantic -Wall -Wextra -Wfatal-errors -Werror=unknown-pragmas -Werror=unused-label -Wshadow -Dcimg_use_abort -Dgmic_is_parallel  -Dcimg_use_fftw3 -I/mingw64/include  -Dcimg_use_curl -I/mingw64/include  -Dcimg_use_png -I/mingw64/include/libpng16 -I/mingw64/include  -Dcimg_use_jpeg -Dcimg_use_tiff -I/mingw64/include  -fopenmp -Dcimg_use_openmp -Dcimg_display=2 -O2
In file included from gmic.h:241,
                 from gmic.cpp:1994:
CImg.h: In function 'cimg_library::CImg<T>& cimg_library::CImg<T>::_load_jpeg(FILE*, const char*) [with T = float]':
CImg.h:7160:18: warning: variable 'res' might be clobbered by 'longjmp' or 'vfork' [-Wclobbered]
 7160 |       std::FILE *res = 0;
      |                  ^~~
CImg.h: In function 'cimg_library::CImg<T>& cimg_library::CImg<T>::_load_jpeg(FILE*, const char*) [with T = double]':
CImg.h:7160:18: warning: variable 'res' might be clobbered by 'longjmp' or 'vfork' [-Wclobbered]
ar rcs libgmic.a libgmic.o
g++ -shared -std=c++11 -pedantic -Wl,-soname,libgmic.so.2 -o libgmic.so libgmic.o -L/mingw64/lib -lz   -L/mingw64/lib -lm -Wl,--stack,16777216   -L/mingw64/lib -lfftw3  -L/mingw64/lib -lcurl  -L/mingw64/lib -lpng16 -lz  -ljpeg -L/mingw64/lib -ltiff  -lgomp -lgdi32
collect2.exe: fatal error: CreateProcess: No such file or directory
compilation terminated.
make[1]: *** [Makefile:413: _lib] Error 1
make[1]: Leaving directory '/c/pdn-gmic/gmic/src'
make: *** [Makefile:409: lib] Error 2

I haven’t built anything in a very long time. I would start by checking out the makefile.

No idea, really.

But if you don’t need libgmic then maybe try to not compile it ? :slight_smile:

AFAIK there is a pre-built package in the msys2 repo, anything wrong with it?

I guess @Reptorian want to hack the G’MIC source code, and build his own version of the software ?

Sure… In that case maybe the msys2 recipe and patches could help as well?

How old is your msys2? In stackoverflow I found rather dated dialogue that leaned toward such…

Actually, I do need libgmic. My goal in the end is to convert my g’mic scripts to Paint.NET plugin with gmic-sharp, so that users of Paint.NET would have my g’mic filters as plugin, and so I wouldn’t need to know c# syntax or workaround that are rather not enjoyable to type in. Hence, why you see pdn-gmic in the error.

I got it from here - https://www.msys2.org/

Hmm, does this mean anything?

DESKTOP MINGW64 /c/pdn-gmic/gmic/src
$ make OPENCV_CFLAGS="" OPENCV_LIBS="" FLTO="" lib
make "CFLAGS+=-Dgmic_build -Dcimg_date=\\\"\\\" -Dcimg_time=\\\"\\\" -Dcimg_use_zlib -I. -I/mingw64/include  -Dgmic_prerelease="\\\"201019\\\""  -std=c++11 -pedantic -Wall -Wextra -Wfatal-errors -Werror=unknown-pragmas -Werror=unused-label -Wshadow -Dcimg_use_abort -Dgmic_is_parallel  -Dcimg_use_fftw3 -I/mingw64/include  -Dcimg_use_curl -I/mingw64/include  -Dcimg_use_png -I/mingw64/include/libpng16 -I/mingw64/include  -Dcimg_use_jpeg -Dcimg_use_tiff -I/mingw64/include  -fopenmp -Dcimg_use_openmp -Dcimg_display=2 -O2" "LIBS+=-L/mingw64/lib -lz   -L/mingw64/lib -lm -Wl,--stack,16777216   -L/mingw64/lib -lfftw3  -L/mingw64/lib -lcurl  -L/mingw64/lib -lpng16 -lz  -ljpeg -L/mingw64/lib -ltiff  -lgomp -lgdi32 " _lib
make[1]: Entering directory '/c/pdn-gmic/gmic/src'
ar rcs libgmic.a libgmic.o
g++ -shared -std=c++11 -pedantic -Wl,-soname,libgmic.so.2 -o libgmic.so libgmic.o -L/mingw64/lib -lz   -L/mingw64/lib -lm -Wl,--stack,16777216   -L/mingw64/lib -lfftw3  -L/mingw64/lib -lcurl  -L/mingw64/lib -lpng16 -lz  -ljpeg -L/mingw64/lib -ltiff  -lgomp -lgdi32
g++ -o use_libgmic use_libgmic.cpp -std=c++11 -pedantic -L. -lgmic -L/mingw64/lib -lz   -L/mingw64/lib -lm -Wl,--stack,16777216   -L/mingw64/lib -lfftw3  -L/mingw64/lib -lcurl  -L/mingw64/lib -lpng16 -lz  -ljpeg -L/mingw64/lib -ltiff  -lgomp -lgdi32
make[1]: Leaving directory '/c/pdn-gmic/gmic/src'

EDIT: I think I can actually compile g’mic-sharp. Just a few more things to figure out now.

It doesn’t say what is wrong… I guess you can tell where it stopped by seeing which files are missing from the build…

From Visual Studio - gmic.lib is missing. But, I’m not sure if you guys can address that.

@PDN_GMIC could.

@Reptorian
I don’t understand the problem with your filters under Paint.Net.
They work on my computer :

I said that I wanted to make pdn plugins using gmic-sharp which uses gmic as a library. It isn’t about gmic-qt, but rather plugins for paint.net users. Gmic as a plugin and individual plugins are different.

MSYS2

As indicated by @kmilos, try these commands which in principle will download the right dependencies then try your G’MIC compilation

64bit
pacman -S mingw-w64-x86_64-gmic

32bit
pacman -S mingw-w64-i686-gmic

You cannot mix compilers when building gmic-sharp-native, you have to build both the libgmic static library and the libGmicSharpNative shared library with the same compiler.

As stated in the gmic-sharp-native readme, the Visual Studio build process is only intended for debugging.
The MSYS 2 instructions are the preferred method of building the library on Windows.

The command seems to work.
At the end I get in src: use_libgmic.exe, libgmic.so, libgmic.a, libgmic.o
I don’t know if there should be other files.
Not very elegant to have an in-source build.

That’s exactly what I get. But, putting them somewhere in bin files of mingw64 folder helps, but I did get a error there using msys2. It’s so close to doing it. I do wish there was clarification on what to do with .a,.so,and .o file in context of gmic-sharp-native.

C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgmic
collect2.exe: error: ld returned 1 exit status

Seem like it’s relate to:

  1. C:\msys64\mingw64\bin
  2. C:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\10.2.0

I believe I have to copy the libgmic.o, and libgmic.a into C:\msys64\mingw64\lib\gcc\x86_64-w64-mingw32\10.2.0\, but the .so?

Here’s what I get by just copying .a and .o file only to 10.2.0 folder

$ g++ -shared -DGMICSHARPNATIVE_EXPORTS -I../gmic/src ./GmicSharpNative.cpp ./version.o -o ../bin/x64/libGmicSharpNative.dll -L../gmic/gcc64 -Wl,--stack,16777216 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -static -lgmic -lfftw3 -lcurl -ltiff -lz -lzstd -llzma -lgomp -ljpeg -lpng
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x78): undefined reference to `__imp_GetDeviceCaps'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0xf1): undefined reference to `__imp_CreateCompatibleDC'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x16f): undefined reference to `__imp_CreateCompatibleBitmap'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x184): undefined reference to `__imp_SelectObject'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x1f3): undefined reference to `__imp_BitBlt'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x213): undefined reference to `__imp_DeleteObject'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x221): undefined reference to `__imp_DeleteDC'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIfEEviiiiRNS_4CImgIT_EE]+0x3a7): undefined reference to `__imp_GetDIBits'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x78): undefined reference to `__imp_GetDeviceCaps'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0xf1): undefined reference to `__imp_CreateCompatibleDC'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x16f): undefined reference to `__imp_CreateCompatibleBitmap'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x184): undefined reference to `__imp_SelectObject'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x1f3): undefined reference to `__imp_BitBlt'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x213): undefined reference to `__imp_DeleteObject'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x221): undefined reference to `__imp_DeleteDC'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0\libgmic.a(libgmic.o):gmic.cpp:(.text$_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE[_ZN12cimg_library11CImgDisplay10screenshotIdEEviiiiRNS_4CImgIT_EE]+0x3a7): undefined reference to `__imp_GetDIBits'
collect2.exe: error: ld returned 1 exit status

*.a are statically linked libraries and *.so are dynamically linked. Not sure about moving them around…

But then I get this error if I don’t copy and paste:

$ g++ -shared -DGMICSHARPNATIVE_EXPORTS -I../gmic/src ./GmicSharpNative.cpp ./version.o -o ../bin/x64/libGmicSharpNative.dll -L../gmic/gcc64 -Wl,--stack,16777216 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -static -lgmic -lfftw3 -lcurl -ltiff -lz -lzstd -llzma -lgomp -ljpeg -lpng
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgmic
collect2.exe: error: ld returned 1 exit status

That’s the step after building libgmic. Gmic-sharp-native instruction tells me nothing about where to build libgmic other than building it inside gmic-sharp-native folder which almost worked, but ended up with a strange error that’s not above.

Could be a number of things in your configuration: forgetting to link, linking wrong directory, flag order, msys64/mingw64 setup or bug, etc.