Внезапно понадобилось разобраться в коде чужого проекта. А чтобы это сделать, его надо сначала скомпилировать и запустить, чтобы убедиться, что всё работает. Проект задизайнен под линукс и там есть мейкфайл. Если сразу попытаться его собрать, то выдаются ошибки об отсутствии хидеров. Если скачать все зависимости, то проект всё-равно не компилируется и выдаёт какие-то совершенно нелепые ошибки. Если проделать то же самое на винде, то этих нелепых ошибок нет, зато появляются другие. Эти другие я легко пофиксил. Теперь оно пытается компилироваться, но не может найти библиотеку -lglew32. Внезапно оказалось, что прекомпилированной библиотеки для MinGW не существует и компилировать её надо вручную. Нашел как это делается:
src/glew.o:glew.c:(.text+0x203a0): multiple definition of `DllMainCRTStartup@12'
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../dllcrt2.o:(.text+0x60): first defined here
collect2.exe: error: ld returned 1 exit status
Опять этот multiple definition и что с ним делать?
Библиотеку умные люди годами писали. Откуда в ней multiple definition?
При сборке в вижуалке ведь никакого multiple definitionа нет
user@comp:~/Рабочий стол/xxx$ make
g++ -o ./bin/tests -g -Wall -Wno-unused-function -L/usr/local/lib -I./include -I/usr/share/include -I/usr/local/libpng/include ./src/*.cpp ./src/Math/*.cpp ./src/UI/*.cpp ./src/Brushes/*.cpp tests.cpp -lGLEW -lglut -lX11 -lGL -lGLU -lm -lstdc++ -lpng -lz
./src/Volume.cpp: In member function ‘void Volume::CopyTris(Vertex*, int)’:
./src/Volume.cpp:430:45: warning: ‘void* memcpy(void*, const void*, size_t)’ writing to an object of non-trivially copyable type ‘struct Vertex’; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
430 | memcpy(buffer + StartIndex, Verts, vs * 15);
| ^
In file included from ./src/Volume.cpp:1:
./src/../include/Volume.h:26:15: note: ‘struct Vertex’ declared here
26 | typedef struct{
| ^
tests.cpp: In function ‘void MouseHandeler(int, int)’:
tests.cpp:221:1: warning: this ‘if’ clause does not guard... [-Wmisleading-indentation]
221 | if(keys['r'])
| ^~
tests.cpp:224:3: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the ‘if’
224 | float t = 0;
| ^~~~~
user@comp:~/Рабочий стол/xxx$
Я поменял имя выходного файла и перекомпилировал еще раз, но новый файл не появился.
Однако, к проекту прилагается уже скомпилированный файл bin/tests. Но при попытке его запуска, выдаётся нет такого файла или каталога. Это у линукса троллинг такой?
OpenGL в виртуалке не инициализируется (точнее, шейдеры не грузятся). Я, в принципе, этого и ожидал.
Мне, всё-равно, по-любому, надо этот исходник на винде собрать. А для этого нужен GLEW для MinGW.
Я вам наврал. Она существует.
У них на сайте лежит архив с версией 2.1.0, в котором эти либы, почему-то, отсутствуют А на гитхабе в архиве с версией 2.2.0 они спокойненько лежат. Я их, почему-то, не увидел