Я хочу скомпилировать проект с открытым исходным кодом, но не могу скомпилировать проект. Я использую Jetbrains CLion в качестве своей IDE.
Проэкт (не стесняйтесь клонировать и попробовать себя): https://github.com/xetra11/vm
Я уже пробовал следующие компиляторы:
Все они выдают ошибки до того, как действительно запустятся. Только двум удается скомпилировать, но это происходит с ошибками компиляции. Сопровождающий сказал мне, что он смог скомпилировать с помощью clang и gcc. Так что я очень сбит с толку, что я здесь делаю неправильно.
Использование LLVM / clang-cpp:
[ 0%] Building CXX object CMakeFiles/libsqfvm.dir/src/Entry.cpp.obj
[ 2%] Building CXX object CMakeFiles/libsqfvm.dir/src/arraydata.cpp.obj
[ 4%] Building CXX object CMakeFiles/libsqfvm.dir/src/astnode.cpp.obj
In file included from C:\Development\Github\sqfvm\src\Entry.cpp:1:
C:\Development\Github\sqfvm\src/netserver.h:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
In file included from C:\Development\Github\sqfvm\src\arraydata.cpp:1:
C:\Development\Github\sqfvm\src/arraydata.h:2:10: fatal error: 'string' file not found
#include <string>
^~~~~~~~
[ 6%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack.cpp.obj
1 error generated.
C:\Development\Github\sqfvm\src\astnode.cpp:1:10: fatal error: 'string' file not found
#include <string>
^~~~~~~~
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:62: CMakeFiles/libsqfvm.dir/src/Entry.cpp.obj] Error 1
make.exe[3]: *** Waiting for unfinished jobs....
1 error generated.
1 error generated.
[ 8%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack_apply.cpp.obj
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:75: CMakeFiles/libsqfvm.dir/src/arraydata.cpp.obj] Error 1
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:88: CMakeFiles/libsqfvm.dir/src/astnode.cpp.obj] Error 1
In file included from C:\Development\Github\sqfvm\src\callstack.cpp:1:
C:\Development\Github\sqfvm\src/callstack.h:2:10: fatal error: 'memory' file not found
#include <memory>
^~~~~~~~
1 error generated.
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:101: CMakeFiles/libsqfvm.dir/src/callstack.cpp.obj] Error 1
In file included from C:\Development\Github\sqfvm\src\callstack_apply.cpp:1:
C:\Development\Github\sqfvm\src/callstack_apply.h:2:10: fatal error: 'memory' file not found
#include <memory>
^~~~~~~~
1 error generated.
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:114: CMakeFiles/libsqfvm.dir/src/callstack_apply.cpp.obj] Error 1
make.exe[2]: *** [CMakeFiles\Makefile2:109: CMakeFiles/libsqfvm.dir/all] Error 2
make.exe[1]: *** [CMakeFiles\Makefile2:121: CMakeFiles/libsqfvm.dir/rule] Error 2
make.exe: *** [Makefile:130: libsqfvm] Error 2
Использование MinGW64 / gcc:
[ 0%] Building CXX object CMakeFiles/libsqfvm.dir/src/Entry.cpp.obj
[ 2%] Building CXX object CMakeFiles/libsqfvm.dir/src/arraydata.cpp.obj
[ 4%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack_apply.cpp.obj
[ 4%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack_count.cpp.obj
[ 6%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack_exitwith.cpp.obj
[ 8%] Building CXX object CMakeFiles/libsqfvm.dir/src/callstack_for.cpp.obj
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\arraydata.cpp:3:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\callstack_count.cpp:2:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\callstack_exitwith.cpp:2:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\callstack_for.cpp:5:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\callstack_apply.cpp:3:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:77: CMakeFiles/libsqfvm.dir/src/arraydata.cpp.obj] Error 1
make.exe[3]: *** Waiting for unfinished jobs....
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:147: CMakeFiles/libsqfvm.dir/src/callstack_exitwith.cpp.obj] Error 1
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:133: CMakeFiles/libsqfvm.dir/src/callstack_count.cpp.obj] Error 1
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:161: CMakeFiles/libsqfvm.dir/src/callstack_for.cpp.obj] Error 1
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:119: CMakeFiles/libsqfvm.dir/src/callstack_apply.cpp.obj] Error 1
In file included from C:\Development\Github\sqfvm\src\virtualmachine.h:11,
from C:\Development\Github\sqfvm\src\Entry.cpp:2:
C:\Development\Github\sqfvm\src\dlops.h: In member function 'void* dlops::resolve(std::__cxx11::string)':
C:\Development\Github\sqfvm\src\dlops.h:65:11: error: invalid conversion from 'long long int (*)()' to 'void*' [-fpermissive]
return res;
^~~
C:\Development\Github\sqfvm\src\dlops.h: In member function 'bool dlops::try_resolve(std::__cxx11::string, void**)':
C:\Development\Github\sqfvm\src\dlops.h:15:43: error: invalid conversion from 'FARPROC' {aka 'long long int (*)()'} to 'void*' [-fpermissive]
#define DLOPS_LIB_SYM(H, N) GetProcAddress(H, N)
~~~~~~~~~~~~~~^~~~~~
C:\Development\Github\sqfvm\src\dlops.h:72:13: note: in expansion of macro 'DLOPS_LIB_SYM'
*outptr = DLOPS_LIB_SYM(handle, name.c_str());
^~~~~~~~~~~~~
make.exe[3]: *** [CMakeFiles\libsqfvm.dir\build.make:63: CMakeFiles/libsqfvm.dir/src/Entry.cpp.obj] Error 1
make.exe[2]: *** [CMakeFiles\Makefile2:109: CMakeFiles/libsqfvm.dir/all] Error 2
make.exe[1]: *** [CMakeFiles\Makefile2:121: CMakeFiles/libsqfvm.dir/rule] Error 2
make.exe: *** [Makefile:130: libsqfvm] Error 2
clang неправильно настроен, поскольку он не находит стандартных включений. gcc жалуется только на нестандартные преобразования указателей, которые можно преодолеть с помощью опции компилятора -fpermissive
(или фиксированного кода).
@ xetra11 @Swordfish правильно. У вас установлена библиотека C++? Вы можете повлиять на поиск clang
с помощью -isystem
и -cxx-isystem
. --print-search-dirs
печатает какие-либо каталоги, которые имеют смысл?
Да, я знаю VS, но я хочу придерживаться Jetbrains IDE. Спасибо