I have installed mingw-w64 because I need C++11/C11 multithreading features for execute armadillo library (http://arma.sourceforge.net/) but I need to compile program with 32bit dll too. When I compile this 32bit program with the flag -m32 there are no problem when I run it but when I run a program with armadillo library with this flag the error 0xc000007b appears. For builds a program with armadillo library I need to link Intel Math Kernel Library (https://software.intel.com/en-us/mkl) for 32bit arquitecture.
I already tried to use dependency walker but the results don't clarify anything.
This is the command line that I use:
g++ --std=c++11 -o PruebaArmadillo PruebaArmadillo.cpp -IC:\armadillo-9.800.4\include -LC:\mkl_32\redist\ia32_win\mkl -lmkl_rt -m32
I work on windows 10 with g++ (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project) 8.1.0
CODE
#include <iostream>
#include <armadillo>
#include <vector>
using namespace std;
using namespace arma;
int main()
{
vec p = { 1, 1, 3 };
cout << p << endl;
}
Result
EDIT
To clarify certain aspects I show here the result of the same code compiled with mingw and with mingw-w64.
With mingw:
C:\MicoCode\prueba1>g++ --version
g++ (MinGW.org GCC-8.2.0-5) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
C:\MicoCode\prueba1>g++ --std=c++11 -o PruebaArmadillo PruebaArmadillo.cpp -IC:\armadillo-9.800.4\include -LC:\mkl_32\redist\ia32_win\mkl -lmkl_rt
In file included from C:\armadillo-9.800.4\include/armadillo:171,
from PruebaArmadillo.cpp:4:
C:\armadillo-9.800.4\include/armadillo_bits/SpMat_bones.hpp:675:29: error: 'mutex' in namespace 'std' does not name a type
arma_aligned mutable std::mutex cache_mutex;
This cause mutex error and that's why I need to use mingw-w64 but this give me the error what I pointed out at the beginning. But if I use the mkl library for 64 bits it's work fine:
C:\MicoCode\prueba1>g++ --version
g++ (x86_64-posix-sjlj-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
C:\MicoCode\prueba1>g++ --std=c++11 -o PruebaArmadillo PruebaArmadillo.cpp -IC:\armadillo-9.800.4\include -LC:\mkl_2\redist\intel64_win\mkl -lmkl_rt
C:\MicoCode\prueba1>PruebaArmadillo.exe
1.0000
1.0000
3.0000
Finally, I found the solution, the error appeared because the system can't find the 32bit libraies because the program is compiled on a 64bit arquitecture. To solve it, it's enough to include these libraries as a path environment variable. The 32bit library it's found on:
C:\---\mingw64\x86_64-w64-mingw32\lib32
User contributions licensed under CC BY-SA 3.0