Форум программистов, компьютерный форум CyberForum.ru

Как правильно подключить lib - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 11:43     Как правильно подключить lib #1
Добрый день.
Пишу консольную программу на C++ (без использования Qt) с помощью редактора Qt Creator.

Она работает, но в Qt уж очень хочется понять, как правильно подключить библиотеки через файл *.pro
Если подключать так, то все работает:
C++
1
2
3
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glut32.lib")
Но при удалении #pragma... и добавлении в *.pro кода:
C++ (Qt)
1
2
INCLUDEPATH += C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Include/gl
LIBS += -LC:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib -lopengl32 -lglut32 -lglu32
появляются ошибки LNK2019

В чем проблема? Может я не правильно что-то пишу в *.pro
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.07.2014, 14:55     Как правильно подключить lib #2
В Microsoft SDK нет библиотек для MinGW.
Текст ошибок какой?
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 15:02  [ТС]     Как правильно подключить lib #3
Ошибки вот:
Код
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glBegin@4 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glClear@4 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glColor3f@12 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glEnd@0 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glLoadIdentity@0 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glMatrixMode@4 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glVertex2i@8 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glViewport@16 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _gluOrtho2D@32 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInit@8 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInitDisplayMode@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInitWindowSize@8 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutMainLoop@0 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutCreateWindow@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutSwapBuffers@0 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutDisplayFunc@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutReshapeFunc@4 в функции _main
debug\test_window.exe : fatal error LNK1120: неразрешенных внешних элементов: 17
По пути (C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib) у меня лежат библиотеки: OpenGl32.Lib; glu32.Lib; glut32.Lib
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.07.2014, 15:18     Как правильно подключить lib #4
Цитата Сообщение от InfoMaster Посмотреть сообщение
По пути (C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib)
Код
LIBS += -L"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib"
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 15:29  [ТС]     Как правильно подключить lib #5
Не помогло... то же набор ошибок
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.07.2014, 15:36     Как правильно подключить lib #6
Что-то я не пойму, компилятор какой?
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 15:39  [ТС]     Как правильно подключить lib #7
Microsoft Visual C++ Compiler 11.0 (x86)
HighPredator
 Аватар для HighPredator
5351 / 1734 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
07.07.2014, 15:54     Как правильно подключить lib #8
Почти уверен, что чтобы мс компиль сработал, вам понадобится работать через мейкфайл. На всякий случай приведите что компилятору идет на вход в командной строки (в итоге).
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.07.2014, 15:55     Как правильно подключить lib #9
Так подключаются библиотеки в MinGW. В MS другой синтаксис.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 15:59  [ТС]     Как правильно подключить lib #10
main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#if defined(linux) || defined(_WIN32)
#include <GL/glut.h> //Для Linux и Windows
#else
#include <GLUT/GLUT.h>  //Для Mac OS
#endif
 
void display()
{
        glClear(GL_COLOR_BUFFER_BIT);
 
        glBegin(GL_QUADS);
        glColor3f(1.0, 1.0, 1.0);
        glVertex2i(250, 450);
        glColor3f(0.0, 0.0, 1.0);
        glVertex2i(250, 150);
        glColor3f(0.0, 1.0, 0.0);
        glVertex2i(550, 150);
        glColor3f(1.0, 0.0, 0.0);
        glVertex2i(550, 450);
        glEnd();
 
        glutSwapBuffers();
}
 
void reshape(int w, int h)
{
        glViewport(0, 0, w, h);
 
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        gluOrtho2D(0, w, 0, h);
 
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
}
 
int main (int argc, char * argv[])
{
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA); /*Включаем двойную буферизацию и четырехкомпонентный цвет*/
 
        glutInitWindowSize(800, 600);
        glutCreateWindow("OpenGL lesson 1");
 
        glutReshapeFunc(reshape);
        glutDisplayFunc(display);
 
        glutMainLoop();
 
        return 0;
}
test_window.pro:
C++ (Qt)
1
2
3
4
5
6
7
8
9
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
 
SOURCES += main.cpp
 
INCLUDEPATH += "C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Include/gl"
LIBS += -L"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib" -lopengl32 -lglut32 -lglu32
Консоль сборки:
Код
17:34:20: Выполняются этапы для проекта test_window...
17:34:20: Настройки не изменились, этап qmake пропускается.
17:34:20: Запускается: «C:\Qt\Tools\QtCreator\bin\jom.exe» 
	C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
	echo 1 /* CREATEPROCESS_MANIFEST_RESOURCE_ID */ 24 /* RT_MANIFEST */ "debug\\test_window.exe.embed.manifest">debug\test_window.exe_manifest.rc
	if not exist debug\test_window.exe if exist debug\test_window.exe.embed.manifest del debug\test_window.exe.embed.manifest
	if exist debug\test_window.exe.embed.manifest copy /Y debug\test_window.exe.embed.manifest debug\test_window.exe_manifest.bak
	link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:CONSOLE "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST /MANIFESTFILE:debug\test_window.exe.embed.manifest /OUT:debug\test_window.exe @C:\Temp\test_window.exe.7188.0.jom
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glBegin@4 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glClear@4 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glColor3f@12 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glEnd@0 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glLoadIdentity@0 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glMatrixMode@4 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glVertex2i@8 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__glViewport@16 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _gluOrtho2D@32 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInit@8 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInitDisplayMode@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutInitWindowSize@8 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutMainLoop@0 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutCreateWindow@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutSwapBuffers@0 в функции "void __cdecl display(void)" (?display@@YAXXZ)
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutDisplayFunc@4 в функции _main
main.obj : error LNK2019: ссылка на неразрешенный внешний символ _glutReshapeFunc@4 в функции _main
debug\test_window.exe : fatal error LNK1120: неразрешенных внешних элементов: 17
jom: C:\Users\nixon\Documents\Qt\Consol_Program_for_OpenGL\build-test_window-Desktop_Qt_5_3_MSVC2012_OpenGL_32bit-Debug\Makefile.Debug [debug\test_window.exe] Error 1120
jom: C:\Users\nixon\Documents\Qt\Consol_Program_for_OpenGL\build-test_window-Desktop_Qt_5_3_MSVC2012_OpenGL_32bit-Debug\Makefile [debug] Error 2
17:34:21: Процесс «C:\Qt\Tools\QtCreator\bin\jom.exe» завершился с кодом 2.
Ошибка при сборке/установке проекта test_window (комплект: Desktop Qt 5.3 MSVC2012 OpenGL 32bit)
Во время выполнения этапа «Сборка»
17:34:21: Прошло времени: 00:01.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.07.2014, 17:10     Как правильно подключить lib #11
Цитата Сообщение от InfoMaster Посмотреть сообщение
Консоль сборки:
Помнится - ms не использует ключ -l

Код
LIBS +=-L"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib" opengl32 glut32 glu32
Странно, что в консоли ключей линкера вообще не видно.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 17:56  [ТС]     Как правильно подключить lib #12
Убрал -l ... толку нет... одни и те же ошибки ... Не находит библиотеки ... в чем же проблема ...
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.07.2014, 18:04     Как правильно подключить lib #13
Попробуй дописать .lib в конце имени каждой библиотеки.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 18:14  [ТС]     Как правильно подключить lib #14
К сожалению не помогает
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.07.2014, 18:17     Как правильно подключить lib #15
Цитата Сообщение от InfoMaster Посмотреть сообщение
К сожалению не помогает
Что-то странное. Без проблем собирал приложения под ms из Creator.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 18:23  [ТС]     Как правильно подключить lib #16
Как вот такой код написать в *.pro файле:
C++
1
2
3
4
5
#if defined(linux) || defined(_WIN32)
#include <GL/glut.h> //Для Linux и Windows
#else
#include <GLUT/GLUT.h>  //Для Mac OS
#endif
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.07.2014, 20:34     Как правильно подключить lib #17
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Что-то странное. Без проблем собирал приложения под ms из Creator.
На самом деле, перечислять библиотеки нет необходимости, они перечислены в qmake.conf
Достаточно указать каталог библиотек в переменной окружения LIB.
Ради интереса окружение почистил, задал в .pro

Код
LIBS+=-L"C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib"
LIBS+=opengl32.lib glu32.lib
qmake+nmake работает. В сreator пришлось удалить все остальные тулкиты, после этого тоже собралось.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
07.07.2014, 21:09  [ТС]     Как правильно подключить lib #18
Блин всё равно не рубит... uglyPinokkio напишите пожалуйста код *.pro и *.cpp который у вас заработал.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
07.07.2014, 21:19     Как правильно подключить lib #19
Сам ничего не делал. Взял:

Код
D:\Qt\Qt5.3.1_MS\Examples\Qt-5.3\opengl\cube
Собрал. Потом ради интереса снес переменную окружения LIB, поправил проект,

Код
QT       += core gui widgets

TARGET = cube
TEMPLATE = app

SOURCES += main.cpp

qtHaveModule(opengl) {
    QT += opengl

    SOURCES += mainwidget.cpp \
       geometryengine.cpp

    HEADERS += \
        mainwidget.h \
        geometryengine.h

    RESOURCES += \
        shaders.qrc \
        textures.qrc
}

LIBS+=-L"C:/Program Files/Microsoft SDKs/Windows/v7.0A/Lib" -L"D:/MVS10/VC/lib"
LIBS+=opengl32.lib glu32.lib

# install
target.path = $$[QT_INSTALL_EXAMPLES]/opengl/cube
INSTALLS += target
И еще раз собрал.
Приложение не в 64 бита случайно собирается?.
В 64 бита именно так и будет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2014, 12:09     Как правильно подключить lib
Еще ссылки по теме:

C++ Как подключить библиотеку (*.lib)
Как правильно подключить curl библиотеку? C++
Как правильно подключить библиотеку SDL C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
08.07.2014, 12:09  [ТС]     Как правильно подключить lib #20
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Потом ради интереса снес переменную окружения LIB, поправил проект
Поясните пожалуйста... А то я не понял, что вы убрали
Yandex
Объявления
08.07.2014, 12:09     Как правильно подключить lib
Ответ Создать тему

Метки
c++, lib, qt, qt creator
Опции темы

Текущее время: 06:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru