#cpp #linux #многопоточность #opengl
g++ -std=c++0x main.cpp -pthread -o main -lglut -lGL - вот так выглядит скрипт, которым я компилирую свой код. При запуске программы получаю ошибку terminate called after throwing an instance of 'std::system_error' what(): Enable multithreading to use std::thread: Operation not permitted если компилировать g++ -std=c++0x main.cpp -pthread -o main -lglut (есть без параметра -lGL), то многопоточность работает, но отрубается OpenGL, разумеется чтобы это скомпилить я закомментил все что связано с opengl. Нужно чтобы одновременно работали и многопоточность и OpenGL. Код: #include#include #include float x=-0.5; using namespace std; void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.0,0.5,0.0); glVertex3f(0.5,-0.5,0.0); glEnd(); glRotatef(10,0,0,1); glutSwapBuffers(); } void t1() { while(x<1) { x=x+0.1; cout << x << endl; } } int main(int argc, char **argv) { thread thr(t1); thr.join(); glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_MULTISAMPLE); glutInitWindowPosition(100,100); glutInitWindowSize(400,400); glutCreateWindow("ss"); glEnable(GL_MULTISAMPLE); glutDisplayFunc(renderScene); glutMainLoop(); return 0; }
Ответы
Ответ 1
А если добавить вот эту опцию компиляции -D_REENTERANT ? UPD: Вот так работает, Вы забыли подключить библиотеку -lpthread g++ -c ./test.cpp -std=c++0x -pthread -D_REENTERANT g++ -o ./test ./test.o -lglut -lGL -lm -lpthread -pthread
Комментариев нет:
Отправить комментарий