Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: radislav72 от Июль 14, 2011, 07:49



Название: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 07:49
Столкнулся с такой "фичей". Библиотека, скомпилированная на одном Линуксе (Федора 13) не работает (вызывает крах приложения) на другом Линуксе (Федора 12). Компиляция того же пректа "на месте" сразу решила проблему- прога работает со "своей" библиотекой без проблем. Но ето не совсем удобно, так как получается файл .so нужно иметь для разных версий линукса... Кстати, размеры обеих файлов разные, для разных версий Линукса...

Как можно решить проблему так, чтоб для всех Линуксов (по крайней мере, Федор), была одна библиотека? Можно ли так? Может, есть какие-то системные настройки, директивы компилятору/ компоновщику или еще что?


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 07:53
Собирай на самой старой федоре.


Название: Re: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 07:58
А причина? Несовместимость вверх?


Название: Re: DLL для разных Линуксов
Отправлено: kuzulis от Июль 14, 2011, 08:21
Лучше и проще всего собирать отдельно под конкретный дистрибутив  инсталляционный пакет.
Ставишь на виртуалку и собираешь.


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 10:35
А причина? Несовместимость вверх?
Вся причина в glibc. Каждая версия gcc по умолчанию жестко завязана на версию glibc.
Чтобы отказаться от этой завязки линковку нужно делать с флагом '-nostdlib'.


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 10:43
Лучше и проще всего собирать отдельно под конкретный дистрибутив  инсталляционный пакет.
Ставишь на виртуалку и собираешь.
Очень геморное решение, требующее очень много времени для сборки и поддержки.
Намного проще иметь один пакет на все дистрибутивы собранный makeself (http://megastep.org/makeself/).
Именно так и делают практически для всех коммерческих пакетов.


Название: Re: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 12:52
Чтобы отказаться от этой завязки линковку нужно делать с флагом '-nostdlib'.
А где этот флаг надо прописать?


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 14:19
Чтобы отказаться от этой завязки линковку нужно делать с флагом '-nostdlib'.
А где этот флаг надо прописать?
В опциях линковки. Всё зависит от того чем и как собирается проект.


Название: Re: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 14:28
Я скачал с оф. сайта Qt для Windows и установил его "по стандарту". Я так понимаю, qmake используется для сборки?

Qt 4.7.0, Qt Creator 2.0.1


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 14:47
Я скачал с оф. сайта Qt для Windows и установил его "по стандарту". Я так понимаю, qmake используется для сборки?
А причём здесь Федора и линукс  ???


Название: Re: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 15:08
Да, извиняюсь!
После создания (в среде Виндовс) проект просто портирован на Федору, на которой так же стандартно устаногвлен тот же Qt (чуть новее- 4.7.2). там и компилировался с помощью Qt Creator-а.


Название: Re: DLL для разных Линуксов
Отправлено: GreatSnake от Июль 14, 2011, 15:12
Да, извиняюсь!
После создания (в среде Виндовс) проект просто портирован на Федору, на которой так же стандартно устаногвлен тот же Qt (чуть новее- 4.7.2). там и компилировался с помощью Qt Creator-а.
Добавь в .pro файл:
Цитировать
QMAKE_LFLAGS += -nostdlib


Название: Re: DLL для разных Линуксов
Отправлено: radislav72 от Июль 14, 2011, 16:23
Так не компилируется вообще

undefined reference to operator...