Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/181: Рейтинг темы: голосов - 181, средняя оценка - 4.81
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
1

Подключение статических библиотек в Creator

01.11.2012, 15:48. Показов 36804. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток.

Возникла необходимость подключения статических библиотек в Creator(в Windows). Но как я не крутил в файле проекта LIBS с *lib - ами, максимум чего добился это что компилятор не ругается и находятся все библиотеки, но после старта программа сразу вылетает с ошибкой
"завершился с кодом -1073741515"
И в интернете не смог найти ничего путного.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2012, 15:48
Ответы с готовыми решениями:

Подключение библиотек KDE в Qt Creator
Qt Creator 2.4.1 Qt 4.8.0 KDE 4.8.5 Kubuntu 12.04 project.pro QT += core KDE

Qt creator не видит библиотек
В Qt хотел запустить примеры браузеров, но Qt creator не видит библиотек. Посоветуйте, пожалуйста,...

Подключение сторонних статических библиотек
Всем привет! У меня есть библиотека по базам, не суть, надо ее подключить в Визуал Студио....

Подключение скомпилированных статических библиотек с++ VS15
Решил поиграться с ncurses. До этого лишь раз пользовал её на Uvuntu. Сейчас сижу в винде....

15
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.11.2012, 16:19 2
Цитата Сообщение от flack Посмотреть сообщение
но после старта программа сразу вылетает с ошибкой
gdb в руки.
0
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
01.11.2012, 16:49  [ТС] 3
С дебагером тоже вылетает ошибка, только её код в hex виде.

А может есть какие-н рабочие примеры подключения статических библиотек к проекту, чтобы увидеть что такое в Creator-е вообще возможно. Хочеться сам принцип понять.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
01.11.2012, 17:29 4
Цитата Сообщение от flack Посмотреть сообщение
А может есть какие-н рабочие примеры подключения статических библиотек к проекту, чтобы увидеть что такое в Creator-е вообще возможно. Хочеться сам принцип понять.
Нет никакой связи между линковкой библиотеки и вылета приложения, так что смотри backtrace.
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
01.11.2012, 19:50 5
Лучший ответ Сообщение было отмечено как решение

Решение

Счас я напишу - в прошлом много наимаялся..

Вот мои примеры (подразумеваю, что библиотеки откомпилились),
в *.pro необходимо добавить (пример для моей библиотеки MANAGER)...

Linux:
INCLUDEPATH += ../LIB/MANAGER/
LIBS += -L../LIB/MANAGER/ -lMANAGER

Winda:
INCLUDEPATH += ..//LIB//MANAGER//
LIBS += -L..//LIB//MANAGER// -lMANAGER

Будьте внимательны с каталогами, теневыми сборками, путями и т.д.
И пофиг, что название библиотеки начинается с lib(libMANAGER.a).
Особое внимание слэши - в винде они парные!!!
А далее подключается где надо только хейдер:
#include <manager.h> и все работает. Вот и все!

Рекомендация: открываете в одной сессии QTCreatora все ваши
статические библиотеки и сам проект(делаете его активным).
А далее-Очистить все-Пересобрать все-И просто скомпилить и запустить проект.
А если будет вылетать, то тогда выход один = дебаг с точками останова и т.д.
Удачи!

Добавлено через 7 минут
Да чуть не забыл, перед началом работы с вашим проектом *.pro
уже должен быть сохраненным и для подключения хейдера тоже.
Вообще его открытым редактором лучше не держать, и еще все
коменты в нем "#" - коментят строчку полностью. Теперь вроде все.
Удачи!
3
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
02.11.2012, 10:57  [ТС] 6
_SASA_, спасибо за подробное описание, но всё равно не помогло
Судя по ошибкам компилятора заголовочный файл он нашёл (undefined reference to '_imp_sum'),
Но библиотеку ему подтянуть так и не удалось(подключаю её как описано в *.pro файле ниже). При других вариантах подключения в про файле он вообще говорит, что не может найти файл test_lib.lib.

ЗЫ Статическая библиотека сделана на билдере для тестов(может в этом тоже что-то есть).

Привожу исходные коды файлов:

ConnectLib.pro
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
QT       += core gui
 
TARGET = ConnectLib
TEMPLATE = app
 
 
SOURCES += main.cpp\
        mainwindow.cpp
 
HEADERS  += mainwindow.h
 
 
INCLUDEPATH += .//ipp//include//
LIBS += -L.//ipp//libs//-ltest_lib.lib
mainwindow.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QtGui/QMainWindow>
#include <QDebug>
 
#include "funcs.h"
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
 
#endif // MAINWINDOW_H
mainwindow.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    int a,b,c;
 
    a = 10;
    b = 23;
 
    c = sum(a,b);
    qDebug()<<tr("result sum = %1").arg(c);
}
 
MainWindow::~MainWindow()
{
 
}
0
Автор FAQ
2732 / 1428 / 89
Регистрация: 08.09.2011
Сообщений: 3,746
Записей в блоге: 1
02.11.2012, 12:55 7
а разве qt не должна быть собрана с определенным флагом для того чтобы работала статическая сборка ?
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
02.11.2012, 12:58 8
Цитата Сообщение от Чистый Посмотреть сообщение
а разве qt не должна быть собрана с определенным флагом для того чтобы работала статическая сборка ?
Для линковки сторонних либ, нет.
1
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
02.11.2012, 14:16 9
Идите путем меньшего сопротивления:

1) Сделайте всё на QT: тестовый проектик + библиотеку статическую...
посмотрите как оно работает - просто простенький пример кода в креаторе.

2) Сделайте для проекта QT свою библиотеку а не буилдера
(он все равно устарел - уходить от него прийдется как ни крути)

3) Да, ещё у меня в путях ".." - везде две точки == каталог вверх!!!
Что означает "." - как с текущего каталога оно пойдёт не знаю сам.

"LIBS += -L.//ipp//libs//-ltest_lib.lib" - у вас неверно
"LIBS += -L.//ipp//libs// -ltest_lib.lib" - верно наверно так (перед -l пробел же).

Вот и видиться только хейдер без библиотеки, естественно!!!


Удачи!
0
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
05.11.2012, 09:50  [ТС] 10
Если поставить пробел перед -ltest_lib.lib, то он пишет, что "cannot find -ltest_lib.lib".

А библиотеку я сейчас для себя сделал, чтобы протестировать как статические подключать, тк есть куча статических библиотек - уже написаных и переписать их нет никакой возможности.
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
05.11.2012, 23:07 11
Вот наш местный "Гуру" (не многословный - сам затрудняется)
посоветовал почитать: http://ru.wikipedia.org/wiki/NASM - да
немного, но все же... С Builder = omf, и др. микрософтовские
стандарты и т.д.... И гарантий никаких, что сделает конвертор,
и нужно библиотеку чем-то, как-то, куда-то конвертировать...
Короче, - лучше, чтоб его диагноз на сей раз не оправдался!!!
________________________________________________________
От меня - попробуйте все ж перейти на QT формат библиотек,
собрав свою мелкую библиотечку не из всей test_lib, а только
частично то, что нужно и необходимо для запуска проекта!!!
1
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
06.11.2012, 11:01  [ТС] 12
Я думал что насчёт разных видов библиотек - действуют только на dll. Может для тестов подключения на чём-н другом библиотку написать.
А так библиотеки, которые мне нужны - если динамически, то подключаются и даже под UNIX работают, но их там просто целая охапка и они завязаны друг на друга и когда я пробую подключать их статически я даже не понимаю что конкретно я не подключил.

Может "местный гуру" посоветует где написать библиотеку, чтобы оттестить её статическое подключение?
0
136 / 140 / 7
Регистрация: 22.08.2011
Сообщений: 485
06.11.2012, 11:40 13
"Гуру" - не знает - говорит, что конвертация = тупиковый путь,
он пробовал = могут быть не перводимые макросы, перменные!

Я гогда-то делал одну статичекую Qt библиотеку, состоящую из
множества динамических (тоже QT) - чтоб меньше подключать!

Совет: делать с нуля и самому, может что-то и получиться!!!
Удачи!
1
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
06.11.2012, 14:26  [ТС] 14
Спасибо за советы и ответы, но я ещё всё таки не буду сдаваться и попробую как-нибудь подключить.
Странно думать, что многие среды между собой подключают библиотечки, а в Qt такой функции нет и для людей у кого много наработок старых имеется это очевидный минус.
0
1443 / 1326 / 131
Регистрация: 20.03.2009
Сообщений: 4,689
Записей в блоге: 11
06.11.2012, 14:45 15
Цитата Сообщение от flack Посмотреть сообщение
Странно думать, что многие среды между собой подключают библиотечки, а в Qt такой функции нет и для людей у кого много наработок старых имеется это очевидный минус.
Я понимаю, старые библиотеки очень сложно пересобрать другим компилятором
0
109 / 36 / 3
Регистрация: 08.08.2009
Сообщений: 134
06.11.2012, 17:12  [ТС] 16
Бывает довольно сложно пересобирать без исходников, когда либы брались уже не помнишь где
0
06.11.2012, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.11.2012, 17:12
Помогаю со студенческими работами здесь

Использование статических библиотек
У меня есть библиотека libcRand.a в которой определен класс cRand. Как мне теперь его использовать?...

Отличие статических библиотек и header файлов
Здравствуйте. Интересно какая, по большому счету, разница между использованием статической...

Вопрос по теории касаемо статических библиотек *.a
Читаю исходники weechat (кто не в курсе - irc клиент). Там я заметил интересную особенность. Ну...

Скрытие warning сторонних статических библиотек в g++
Здравствуйте! Я статически подключаю библиотеку (liblibrary.a), и тут компилятор gnu g++ выдает...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru