Форум программистов, компьютерный форум 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
08.07.2014, 16:15     Как правильно подключить lib #21
Цитата Сообщение от InfoMaster Посмотреть сообщение
Но при удалении #pragma... и добавлении в *.pro кода:
После добавления в *.pro делал "Меню"->"Сборка"->"Очистить все", "Run qmake" ?
Надо делать после каждой правки pro-файла.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
08.07.2014, 16:45     Как правильно подключить lib #22
Цитата Сообщение от InfoMaster Посмотреть сообщение
Поясните пожалуйста... А то я не понял, что вы убрали
http://windata.ru/windows-7/nastrojk...y-v-windows-7/

В переменной окружения LIB могут быть перечислены пути, по которым компилятор ищет библиотеки.
Для компилятора ms она может выглядеть так:

Код
LIB=d:\MVS10\VC\LIB;C:\Program Files\Microsoft SDKs\Windows\v7.0A\lib
В этом случае в .pro в переменной LIBS эти пути можно не указывать.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
08.07.2014, 22:14  [ТС]     Как правильно подключить lib #23
Цитата Сообщение от Avazart Посмотреть сообщение
После добавления в *.pro делал "Меню"->"Сборка"->"Очистить все", "Run qmake" ?
Надо делать после каждой правки pro-файла.
Добавил к *.pro файлу код:
Код
LIBS+=-L"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib" -L"C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x64"
LIBS+=opengl32.lib glut32.lib
Потом сделал: "Меню"->"Сборка"->"Очистить все", "Run qmake"

Количество ошибок уменьшилось до 1-й:
Код
main.obj:-1: ошибка: LNK2019: ссылка на неразрешенный внешний символ _gluOrtho2D@32 в функции "void __cdecl reshape(int,int)" (?reshape@@YAXHH@Z)
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
08.07.2014, 22:20     Как правильно подключить lib #24
Значит путь не верное указан, не подхватывает.
C++ (Qt)
1
LIBS+=opengl32.lib glut32.lib
Расширение не нужно указывать, просто
C++ (Qt)
1
LIBS+=opengl32 glut32
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
08.07.2014, 22:27  [ТС]     Как правильно подключить lib #25
Цитата Сообщение от Avazart Посмотреть сообщение
Расширение не нужно указывать, просто
Только вот он почему то ищет тогда файл:
:-1: ошибка: LNK1104: не удается открыть файл "opengl32.obj"
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
08.07.2014, 22:35     Как правильно подключить lib #26
Цитата Сообщение от InfoMaster Посмотреть сообщение
олько вот он почему то ищет тогда файл:
:-1: ошибка: LNK1104: не удается открыть файл "opengl32.obj"
Наверное -l зря убрал.

Ну вот пример подключения OpenCV
C++ (Qt)
1
2
INCLUDEPATH += C:/OpenCV2.2/include
LIBS += -LC:\OpenCV2.2\lib -lopencv_core220 -lopencv_imgproc220 -lopencv_highgui220
Вот boost
C++ (Qt)
1
2
INCLUDEPATH += "C:/Program Files/boost VC++/boost_1_50"
LIBS        += -L"C:/Program Files/boost VC++/boost_1_50/lib" -lboost_regex-vc100-mt-1_50
Т.е рабочие мои примеры, у меня MSVC2010
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
08.07.2014, 22:47  [ТС]     Как правильно подключить lib #27
Спасибо... Да -l нужны... но теперь снова куча ссылок на неразрешенный внешний символ... Буду пытаться.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
08.07.2014, 22:48     Как правильно подключить lib #28
InfoMaster, Очистить,qmake не забыл после правки ?

Кстати чем тебе Qt-обвертка не подходит ?
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
08.07.2014, 22:54  [ТС]     Как правильно подключить lib #29
Да нажимаю очистить всё... потом запускаю qmake... и начинаю отладку

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Кстати чем тебе Qt-обвертка не подходит ?
Не совсем понял вопрос...
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
08.07.2014, 23:17     Как правильно подключить lib #30
http://qt-project.org/doc/qt-4.8/qtopengl.html
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 05:39     Как правильно подключить lib #31
Код
LIBS+=opengl32.lib glut32.lib
Цитата Сообщение от InfoMaster Посмотреть сообщение
Количество ошибок уменьшилось до 1-й:
Нужно добавить еще Glu32.lib

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Цитата Сообщение от Avazart Посмотреть сообщение
Расширение не нужно указывать
Нужно, ну это вы уже выяснили
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
09.07.2014, 06:50  [ТС]     Как правильно подключить lib #32
Всем огромное спасибо разобрался... Файл *.pro выглядит теперь так:
Код
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

LIBS += -L"C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1A/Lib"
LIBS += -lopengl32 -lglu32 -lglut32
Начало программы:
C++
1
2
3
4
5
6
#if defined(linux) || defined(_WIN32)
#include <GL/glut.h> //Для Linux и Windows
#else
#include <GLUT/GLUT.h>  //Для Mac OS
#endif
//...
Как только отредактировал файл *.pro:
Меню -> сборка -> Очистить все; Запустить qmake

Компилятор Desktop Qt 5.3 MSVC2012 OpenGL 32bit (Microsoft Visual C++ Compiler 11.0 (amd64))

-> Проблема была в том, что я собирал проект через Desktop Qt 5.3 MSVC2012 OpenGL 64bit (могут быть опечатки, название написал на память)

Запускаем "Сборку"... Все работает. Еще раз всем спасибо.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 07:15     Как правильно подключить lib #33
Цитата Сообщение от InfoMaster Посмотреть сообщение
Проблема была в том, что я собирал проект через Desktop Qt 5.3 MSVC2012 OpenGL 64bit
Я знал, я знал:

Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Приложение не в 64 бита случайно собирается?.
В 64 бита именно так и будет.
InfoMaster
25 / 14 / 1
Регистрация: 12.08.2011
Сообщений: 276
09.07.2014, 08:21  [ТС]     Как правильно подключить lib #34
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Я знал, я знал:
А если в 64 бит собирать, то надо подключать opengl64.lib glut64.lib, gl64.lib ?
Или там свои заморочки ?
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 08:29     Как правильно подключить lib #35
Цитата Сообщение от InfoMaster Посмотреть сообщение
А если в 64 бит собирать, то надо подключать opengl64.lib glut64.lib, gl64.lib ?
Или там свои заморочки
Библиотеки надо брать 64-х битные, они для OpenGL называются ,на сколько я помню, так же, но лежат в другом каталоге. на 64-х битной системе два каталога "Program Files" и "Program Files (x86)", второй для 32-х битных приложений, туда ms ставит по дефолту библиотеки для 32-бит приложений, для 64 - в первый.

UP.

Соврал немного
Для 32-бит:
Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\
Для 64-бит:
Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
09.07.2014, 09:53     Как правильно подключить lib #36
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Нужно, ну это вы уже выяснили
Не нужно, читай доку и книги.
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 10:13     Как правильно подключить lib #37
Цитата Сообщение от Avazart Посмотреть сообщение
Не нужно, читай доку и книги.
http://msdn.microsoft.com/ru-ru/library/btw8x58e.aspx

Без расширения оно будет интерпретироваться как имя объектного файла, что собственно и произошло.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
09.07.2014, 10:51     Как правильно подключить lib #38
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Без расширения оно будет интерпретироваться как имя объектного файла, что собственно и произошло.
Че вы мне кидаете ссылку на MS, Qt типа кроссплатформенный фреймворк и то что в виндовс lib в линукс so или a (точно не помню) а потому писать нужно без расширения но зато с приставкой -l
uglyPinokkio
325 / 228 / 41
Регистрация: 30.05.2014
Сообщений: 682
09.07.2014, 11:03     Как правильно подключить lib #39
Цитата Сообщение от Avazart Посмотреть сообщение
в виндовс lib в линукс so или a (точно не помню) а потому писать нужно без расширения но зато с приставкой -l
в windows .lib, в linux .a для статических библиотек и .so для динамических. qmake пытается генерить Makefail под целевую платформу, в частности для ms убирает -l и дописывает .lib
Иногда полезно понимать что на самом деле происходит.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2014, 11:09     Как правильно подключить lib
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,578
Записей в блоге: 17
09.07.2014, 11:09     Как правильно подключить lib #40
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
в windows .lib, в linux .a для статических библиотек и .so для динамических. qmake пытается генерить Makefail под целевую платформу, в частности для ms убирает -l и дописывает .lib
Иногда полезно понимать что на самом деле происходит.
Для того и пишутся фреймворки что иногда было иногда, а не постоянно.

Если указывать расширения явно и плевать на то что рекомендует Qt то с таким же успехом можно использовать
C++
1
2
3
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
#pragma comment(lib,"glut32.lib")
Yandex
Объявления
09.07.2014, 11:09     Как правильно подключить lib
Ответ Создать тему

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

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