LINUX.ORG.RU

Как собирать на Fedora-64 32-битные приложения (CMake)

 , ,


0

1

Добрый день

Пытаюсь добиться сборки 32-битного варианта приложения (64 бита собирается без проблем). Использую CMake, который генерирует проект для GCC.

В файл CMake-а добавляю строку: set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS «-m32» LINK_FLAGS «-m32») На это CMake выдает ошибку: CMake Error at CMakeLists.txt:8 (set_target_properties): set_target_properties Can not find target to add properties to: mgcore

Как я понимаю, нет пакета для сборки в 32-битном режиме. Нахожу совет за 2023 год конкретно для Fedora, т.е. недавний: sudo dnf install gcc-multilib На это получаю сообщение об отсутствии такого пакета.

Разные вариации вариантов типа: sudo apt install gcc-multilib или sudo apt install g++-multilib тоже не работают, потому что apt на Fedore не хочет работать в принципе, а попытка подсунуть вместо него yum или apt-get также ведут к ошибке типа «такого пакета нет».

Ответ на: комментарий от EXL

Хорошо, предоставляю то, что выдает CMake:


root@fedora build]# cmake ..

– The C compiler identification is GNU 6.4.1

– The CXX compiler identification is GNU 6.4.1

– Detecting C compiler ABI info

– Detecting C compiler ABI info - done

– Check for working C compiler: /usr/bin/cc - skipped

– Detecting C compile features

– Detecting C compile features - done

– Detecting CXX compiler ABI info

– Detecting CXX compiler ABI info - done

– Check for working CXX compiler: /usr/bin/c++ - skipped

– Detecting CXX compile features

– Detecting CXX compile features - done

CMake Error at CMakeLists.txt:8 (set_target_properties): set_target_properties Can not find target to add properties to: mgcore

– Configuring incomplete, errors occurred!


Не очень понял, что делать вот с этим: cmake –build . –verbose

[root@fedora build]# cmake .. –verbose

CMake Error: Unknown argument –verbose

CMake Error: Run ‘cmake –help’ for all supported options.

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

А если просто тупо сделать костылём:

set(CMAKE_C_FLAGS "-m32")
set(CMAKE_CXX_FLAGS "-m32")

Если это сработает, значит у тебя проблема не с мультилибом, а с CMake и TARGET’ами в нём.

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

Кажется ваш совет с «костылём» работает. По крайней мере, я вижу, что команда:

objdump -f mylib.a | awk ‘sub(/.*file format /,"") && !a[$0]++’

показывает в результате elf32-i386

Благодарю за помощь!

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

Телепаты у вас хорошие :-)

Я перебросил строку set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS «-m32» LINK_FLAGS «-m32») под add_library, и теперь CMake отрабатывается без ошибок. Но make не хочет собирать, выдавая при компиляции первого же файла: c++: error: «-m32»: No such file or directory

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

Именно так… что интересно, я эту строку, естественно, из интернета скопировал без изменений. К сожалению, сейчас результат проверить не могу, но через пару недель проверю на собираемость. Благодарю за помощь!

Odin_KG
() автор топика