Build on Windows Machine
How can I build this library on the Windows machine?
make command output on Windows 10:
g++ -std=c++11 -Wall -pedantic -c utils/utilities.cpp -o build/utilities.o
utils/utilities.cpp: In function 'int readMapFromFile(std::__cxx11::string, std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >*)':
utils/utilities.cpp:221:35: error: no matching function for call to 'getline(char**, size_t*, FILE*&)'
while (getline(&buf, &buflen, fp) > 0) {
^
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:53:0,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_map.h:63,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\map:61,
from utils/utilities.hpp:4,
from utils/utilities.cpp:1:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.tcc:1509:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, _CharT)
getline(basic_istream<_CharT, _Traits>& __in,
^~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.tcc:1509:5: note: template argument deduction/substitution failed:
utils/utilities.cpp:221:35: note: mismatched types 'std::basic_istream<_CharT, _Traits>' and 'char**'
while (getline(&buf, &buflen, fp) > 0) {
^
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:52:0,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_map.h:63,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\map:61,
from utils/utilities.hpp:4,
from utils/utilities.cpp:1:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:5365:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)
getline(basic_istream<_CharT, _Traits>& __is,
^~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:5365:5: note: template argument deduction/substitution failed:
utils/utilities.cpp:221:35: note: mismatched types 'std::basic_istream<_CharT, _Traits>' and 'char**'
while (getline(&buf, &buflen, fp) > 0) {
^
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:52:0,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_map.h:63,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\map:61,
from utils/utilities.hpp:4,
from utils/utilities.cpp:1:
aits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&, _CharT)
getline(basic_istream<_CharT, _Traits>&& __is,
^~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:5373:5: note: template argument deduction/substitution failed:
utils/utilities.cpp:221:35: note: mismatched types 'std::basic_istream<_CharT, _Traits>' and 'char**'
while (getline(&buf, &buflen, fp) > 0) {
^
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\string:52:0,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\stdexcept:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\array:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\tuple:39,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\stl_map.h:63,
from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\map:61,
from utils/utilities.hpp:4,
from utils/utilities.cpp:1:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:5380:5: note: candidate: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::getline(std::basic_istream<_CharT, _Traits>&&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)
getline(basic_istream<_CharT, _Traits>&& __is,
^~~~~~~
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\bits\basic_string.h:5380:5: note: template argument deduction/substitution failed:
utils/utilities.cpp:221:35: note: mismatched types 'std::basic_istream<_CharT, _Traits>' and 'char**'
while (getline(&buf, &buflen, fp) > 0) {
^
make: *** [makefile:22: build/utilities.o] Error 1
Hi!
Unfortunately, we do not support Windows and MinGW officially.
It seems that we have used non-POSIX gcc-specific old-C-style getline there, which is not available in MinGW (See https://stackoverflow.com/q/27381903).
If you have found any workaround, merge-requests are appreciated. :D
Do you have any solution? 🤔 @gsoosk @sadmanbrad
I think we can change the implementation of readMapFromFile method from this:
https://github.com/UTAP/APHTTP/blob/03a8239280e43d1185c197e42392832608c5c42c/utils/utilities.cpp#L209-L246
to this:
int readMapFromFile(std::string fname, std::map<std::string, std::string> *m) {
ifstream inputStream(fname);
std::string line;
if (inputStream.fail())
return -errno;
while (getline(inputStream, line)) {
auto tokens = tokenize(line, '=');
// KEY VALUE
(*m)[tokens[0]] = tokens[1];
}
return (*m).size();
}
Thank you. Your code seems much cleaner than the old one. :D I did not remember internals of library, so I'll ask someone else to review it and apply the patch if everything is OK. A MR will be appreciated, too. :D