LINUX.ORG.RU

Включение 32-х битного легаси в проект на Qt с компиляцией в 64 бита

 , , , , опции


0

2

Имею исходники 32-х битного легаси-кода, который может скомпилиться только с опциями:

CXXFLAGS+= -m32 -std=gnu++98
LDFLAGS += -m32

Я включаю эти исходники в проект на Qt, причем сборка и работа полученного кода должна производиться на 64-х битном Linux. (А потом должна еще работать сборка и под Android в 32 бита).

Вопрос 1. Как в *.pro файле указать опции компиляции и линковки только для конкретных файлов (то есть опции эти должны применяться только для легаси-кода).

Вопрос 2. А слинкуется ли весь остальной проект с объектниками, которые получены в вопросе 1?

★★★★★

Нет, ничего не получится.

Можешь сделать и собрать 32битное сервис-приложение из этих исходников, которое будет запускаться отдельным процессом, и к которому будет обращаться твой основной проект, запуская exec или , то или иное IPC

Я бы рассмотрел вариант портирования на 64-бита этого кода, не надо сбрасывать со счетов. Это радикально упростит все костыли. Обращай внимание на варнинги компиляторов с максимальной педантичностью, собирай и clang и gcc - это вычистит множество технических косяков в коде.

Deleted
()

Нельзя перемешивать архитектуры. Надо отрефакторить легаси хлам чтобы он работал на двух архитектурах. Скорее всего там мелочи какие-то.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)

Если там меньше 100к строк, то проще портировать, чем придумывать костыли. Под виндой, был какой то механизм для загрузки 32битных либ в x64 образ, а вот под онтопиком не уверен.

pon4ik ★★★★★
()

Как вариант собери 32-битный Qt, всё равно прийдётся это делать для Андроида.

Dendy ★★★★★
()

Собирать весь проект с -m32, иначе никак

annulen ★★★★★
()
Ответ на: комментарий от Dendy

Зачем? На 64-х битной установке все нормаььно компилруется под 32-х битный андроид. И к тому же сейчас уже смартфоны пошли с 64 битными процами.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

На 64-х битной установке

Установке чего? Как вариант, для целевой платформы можно собирать прямо сейчас под 32 бита, и озаботиться портированием библиотеки позже, если вообще нужно будет.

нормаььно компилруется

Закусывай.

Dendy ★★★★★
()

У меня был аналогичный случай, причём легаси-программа была довольно большой и работала со специфическими форматами файлов (был риск, что даже если я портирую код, и он соберётся, может поломаться что-то с размерами структур). В итоге я плюнул и собрал под 32 бита всё, включая свой код. Да, я осознавал, что это временное решение, но нет ничего более постоянного, чем временное.

Есть же мультиарч, в конце концов...

P.S. Да, это вредный совет. Но жизненный.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от Dendy

Установке чего?

Установке Qt+QtCreator с официального сайта. Там только 64 бита нынче лежит.

https://www1.qt.io/offline-installers/


Как вариант, для целевой платформы можно собирать прямо сейчас под 32 бита, и озаботиться портированием библиотеки позже

Имеешь в виду добавить на весь проект опцию -m32? Или что-то другое?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Установке Qt+QtCreator с официального сайта. Там только 64 бита нынче лежит.

Если тебе под Андроид, то собери сам из исходников, там нет ничего сложного.

Имеешь в виду добавить на весь проект опцию -m32?

Да, обычная сборка всего проекта под 32 бита.

С технической стороны в этом нет ничего плохого, каждый в пределах юзерспейса волен выбирать битность (с учётом поддержки в ядре), ABI, стандартную библиотеку, компилятор. И в том же Андроиде на выбор даётся несколько вариантов. Но код, если есть исходники, можно было бы и поправить.

Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.