Russian Qt Forum
Ноябрь 24, 2024, 20:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Сборка boost::thread из Qt  (Прочитано 19173 раз)
Elfet
Гость
« : Май 05, 2010, 14:48 »

Всем привет!

Пытаюсь собрать boost::thread под Windows из Qt. (как пользоватся этой bjam так и не резобрался =( ) Поэтому решил просто собрать вре файлы из boost/lib/thread/src/ в Qt проект и скомпилировать:
Цитировать
QT -= gui
TARGET = thread
TEMPLATE = lib
CONFIG += staticlib

SOURCES += tss_null.cpp \
    win32/tss_pe.cpp \
    win32/tss_dll.cpp \
    win32/timeconv.inl \
    win32/thread.cpp \
    win32/exceptions.cpp

# boost
INCLUDEPATH += D:/Qt/boost/boost_1_40_0

Однако не получилось, компилятор minGW выдал следующее:

Цитировать
gcc: win32\timeconv.inl: linker input file unused because linking not done
win32\thread.cpp: In static member function 'static unsigned int boost::thread::hardware_concurrency()':
win32\thread.cpp:306: warning: missing braces around initializer for '_SYSTEM_INFO::<anonymous union>'
win32\thread.cpp: In function 'LARGE_INTEGER boost::this_thread::<unnamed>::get_due_time(const boost::detail::timeout&)':
win32\thread.cpp:329: warning: missing braces around initializer for '_LARGE_INTEGER::<anonymous struct>'

Как от этого избавится? Пожалуйста, помогите собрать boost::thread!

Заранее спасибо!
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #1 : Май 05, 2010, 15:45 »

Цитировать
Однако не получилось, компилятор minGW выдал следующее:

А я что-то не вижу хедэров..

типа:
HEADERS += ...

Или их там принципиально нэт  Непонимающий))
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Elfet
Гость
« Ответ #2 : Май 05, 2010, 16:40 »

А их разве нужно подключать?
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #3 : Май 05, 2010, 23:28 »

Цитировать
А их разве нужно подключать?
Да нет)) Достаточно компу сказать:
-Эй, собери мне вот енту библиотеку)) Ну ты знаешь где что лежит, окэ)))

Если у вас изначально только исходники и вы хотите собрать из низ библиотеку, нужно указать и хэдэры.. После этого (после того как он соберёт их) в файле проекта, где используется ваша библиотека нужно указать путь к хэдерам:
INCLUDEPATH += ...// путь где лежат хэдеры

и добавить:

LIBS += -L/путь к библиотеке -lmylib
где mylib - эт то как она у вас зовётся)

И почитайте тему: уроки и статьи "Создание динамических библиотек" там всё оч хорошо освящено (хотя прилогаемые примеры у меня собрались тока под линем) под хренью есть одна тонкость, ну да фиг с ней))     
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Elfet
Гость
« Ответ #4 : Май 06, 2010, 10:42 »

Добавлять хедеры вовсе не обязательно в проект. Так как они не компилируются. Компилируются только cpp файлы.
INCLUDEPATH += ...// у меня есть на буст, так как собираюсь собирать буст.
Записан
niXman
Гость
« Ответ #5 : Май 06, 2010, 12:05 »

собранный boost: http://rghost.ru/1409960

постоянно натыкаюсь на подобные посты, и не въезжаю - в чем же сложность сборки boost Непонимающий на офф сайте есть инструкция по сборке, состоящая из трех шагов.
« Последнее редактирование: Май 06, 2010, 12:09 от niXman » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #6 : Май 07, 2010, 19:38 »

Цитировать
Добавлять хедеры вовсе не обязательно в проект. Так как они не компилируются.

Разумеется нет) В ваш проект, который использует boost даже .cpp файлы добавлять не нужно)
В файле вашего проекта (который использует уже собранную либу) должны быть тока две строчки:
1) INCLUDEPATH += то, где лежат хедеры
2) LIBS += -L/ путь, где лежат сами длл (ну или как вы там её собрали..) -lnamelib
где namelib - ну я эт уже говорил))

Но чтоб собрать её (либу) используя qmake нужно в pro файле указать и исходники SOURCES и хедеры HEADERS...
ну и INCLUDEPATH тож разумеется))

Вот соберёте её, и можете вообще все ваши .cpp файлы удалить нафиг, главное длл и хедеры чтоб были..

А так вы хрен соберёте, без хедеров))

Бог в помощь, короче)) Я пошёл пиво пить))   
     
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Elfet
Гость
« Ответ #7 : Май 08, 2010, 10:35 »

niXman, я пытаюсь сделать это под Windows. Что за три шага? Что мне нужно сделать что-бы она собралась?  Непонимающий

 m_ax, мне dll вовсе и не нужен. при сборке ЛЮБОГО проекта добавлять хедеры не обязательно, так как компилируются (в объектные файлы) только cpp файлы.
Записан
Marat(Qt)
Гость
« Ответ #8 : Май 08, 2010, 10:53 »

niXman, я пытаюсь сделать это под Windows. Что за три шага? Что мне нужно сделать что-бы она собралась?  Непонимающий

 m_ax, мне dll вовсе и не нужен. при сборке ЛЮБОГО проекта добавлять хедеры не обязательно, так как компилируются (в объектные файлы) только cpp файлы.
Либо я совсем ничего не понимаю, либо вы несете чушь
Записан
Sancho_s_rancho
Гость
« Ответ #9 : Май 08, 2010, 11:05 »

m_ax, мне dll вовсе и не нужен. при сборке ЛЮБОГО проекта добавлять хедеры не обязательно, так как компилируются (в объектные файлы) только cpp файлы.
Яростный бред.
Записан
Elfet
Гость
« Ответ #10 : Май 08, 2010, 11:22 »

 Смеющийся Смеющийся Смеющийся возьмите любой проект, в файле pro за комментируйте все хедеры (только обеспечьте их видимость из cpp-файлов) и собирайте проект Улыбающийся
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #11 : Май 08, 2010, 14:10 »

Цитировать
возьмите любой проект, в файле pro за комментируйте все хедеры (только обеспечьте их видимость из cpp-файлов) и собирайте проект
Аминь)))

Беру, как вы говорите любой проект) В моём случае я создал ради прикола самое простое (исходники приатачены). Всего один хедер: widget.h и соответствующий ему widget.cpp. Да, ну и разумеется main.cpp)
Вот как выглядит .pro файл этого проекта (рабочей заметьте):
Код
C++ (Qt)
TARGET = SimpleProject
TEMPLATE = app
 
SOURCES += main.cpp\
       widget.cpp
 
HEADERS  += widget.h
 
MOC_DIR = $$PWD/build
OBJECTS_DIR = $$PWD/build
DESTDIR = $$PWD/bin
 
   

На последние три строчки внимания не обращайте. В таком виде всё собирается и работает))

Теперь, по вашему совету, я убираю (закомментирую) HEADERS..
Пробую собрать: хрен((
Ладно, думаю может добавление INCLUDEPATH исправит дело? Добавляю... Компилирую, компилирую: Ыыы  В замешательстве
Ладно, вспомнил вы говорили, что нуна бы обеспечить видимость хедеров в cpp файлах.. Если честно, долго думал, чтобы это могло значить.. Короче я так понял, нужно в cpp файлах где инклудятся заголовочники прописывать полный путь.. Например:
Код
C++ (Qt)
#include "/home/max/Qt-projects/SimpleProject/widget.h"
// вместо
#include "widget.h"
 
Прописал везде полные пути.. Ворожу, ворожу не торможу  Смеющийся
И на этот раз обломс Злой

В чём ваш секрет, любезнейший??
 

Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
niXman
Гость
« Ответ #12 : Май 08, 2010, 14:12 »

Цитировать
niXman, я пытаюсь сделать это под Windows. Что за три шага? Что мне нужно сделать что-бы она собралась?
я ведь не радиоточка.
говорю что буст собирается РОВНО за три шага!
Записан
Elfet
Гость
« Ответ #13 : Май 08, 2010, 14:20 »

niXman, ну так что за три шага-то? Улыбающийся

Вот зацените простейшее консольное приложение + класс и - header.
Записан
Elfet
Гость
« Ответ #14 : Май 08, 2010, 14:24 »

Видимо не собирается если в классе есть макрос Q_OBJECT - и если отсутствуют заголовочные файлы не происходит qmake для них и не создаются moc_*.cpp.  Улыбающийся
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.