Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: dr_Begemot от Май 07, 2009, 10:13



Название: Взаимодействие проектов
Отправлено: dr_Begemot от Май 07, 2009, 10:13
Проблема в следующем, есть динамическая библиотека на Qt. Однако в некоторых других прооектах нужно, чтобы эта библиотека была статической. Можно ли как-то прописать в pro-файлах этих других проектов, чтобы библиотека была перекомпилена в статическую либу?


Название: Re: Взаимодействие проектов
Отправлено: spirit от Май 07, 2009, 10:15
библиотеку надо статически собирать.


Название: Re: Взаимодействие проектов
Отправлено: spirit от Май 07, 2009, 10:17
вот, кстати, нашел про то как создавать либы (http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA), а так же как собирать приложения статически (http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9).
PS.  не ну действительно, че так сложно поискать по форуму, по вики?  ???


Название: Re: Взаимодействие проектов
Отправлено: dr_Begemot от Май 07, 2009, 10:28
вот, кстати, нашел про то как создавать либы (http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA), а так же как собирать приложения статически (http://prog.org.ru/wiki/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%81%D1%82%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9).
PS.  не ну действительно, че так сложно поискать по форуму, по вики?  ???

Я знаю как создавать dll и как делать их статическими, вопрос был в другом...


Название: Re: Взаимодействие проектов
Отправлено: ритт от Май 07, 2009, 11:11
вопрос был "Можно ли как-то прописать в pro-файлах этих других проектов, чтобы динамическая библиотека превратилась в статическую либу?" :)
spirit ответил на вопрос.


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 07, 2009, 13:06
Я знаю как создавать dll и как делать их статическими, вопрос был в другом...
если вы в качестве системы сборки вы используете qmake, то он при генерации Make - файла для библиотеки, создает цель для сборки - staticlib. Т.о. указав при сборке в качестве цельи - staticlib, вы можете собрать библиотеку статически.
Код:
make staticlib

З.Ы. проверено только под линукс, как с другими платформами я не знаю.


Название: Re: Взаимодействие проектов
Отправлено: ритт от Май 07, 2009, 20:58
в проекте cmake вроде бы можно сразу указать сборку динамической и статической либы...


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 07, 2009, 22:06
в проекте cmake вроде бы можно сразу указать сборку динамической и статической либы...
если они будут лежать рядом, то линкер какую возмет? ... имена то одинаковые


Название: Re: Взаимодействие проектов
Отправлено: lit-uriy от Май 07, 2009, 22:29
>>если они будут лежать рядом, то линкер какую возмет? ... имена то одинаковые
туже, что и файловая система ;)


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 07, 2009, 22:34
не понял... что первое по запросу попадет? ... это не серьезно  :)


Название: Re: Взаимодействие проектов
Отправлено: lit-uriy от Май 07, 2009, 22:43
не может быть двух одинаковых файловых объекта. Т.е. два файла с одинаковыми именами в одном каталоге.


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 07, 2009, 22:55
не может быть двух одинаковых файловых объекта. Т.е. два файла с одинаковыми именами в одном каталоге.
я не идиот  ;)
я имел ввиду имена библиотек. Если мы собирем библиотеку mytest статически и динамически то получим 2 файла (пример для gcc): libmytest.so и libmytest.a
При подключении мы указываем имя библиотеки: "-lmytest". Так вот какой из файлов, линкер возмет?


Название: Re: Взаимодействие проектов
Отправлено: ритт от Май 08, 2009, 00:01
-lmytest при наличии libmytest.so будет использовать его, а -llibmytest.a будет искать .а-файл
кажется, так...могу ошибаться...


Название: Re: Взаимодействие проектов
Отправлено: lit-uriy от Май 08, 2009, 08:07
>>libmytest.so и libmytest.a
ну для линя оно может и так. А вот для виндовоза при создании динамической библиотеки генерятся два файла
mytest.dll и mytest.a
и для статической один
mytest.a

как я понял в первом случае a-файл некая обёртка для dll'ки. Так что в одном каталоге, на виндовозе, две сборки держать не удастся.


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 08, 2009, 14:21
>>libmytest.so и libmytest.a
ну для линя оно может и так. А вот для виндовоза при создании динамической библиотеки генерятся два файла
mytest.dll и mytest.a
и для статической один
mytest.a

как я понял в первом случае a-файл некая обёртка для dll'ки. Так что в одном каталоге, на виндовозе, две сборки держать не удастся.
записал.

Тогда проверь еще пожалуйста в Makefile'е, генерит qmake цель для staticlib? ... чтоб сразу со всем разобраться.
лень винду грузить смотреть.


Название: Re: Взаимодействие проектов
Отправлено: lit-uriy от Май 08, 2009, 17:24
>>Тогда проверь еще пожалуйста в Makefile'е, генерит qmake цель для staticlib?
Хм, в котором make-файле?


Название: Re: Взаимодействие проектов
Отправлено: Dodge от Май 08, 2009, 21:15
debug/release? любом =)