Имеется porteus базированный на slackware. Хочу скомпилировать wine, но мне во время компиляции пишет следующее:
checking for ld... ld
checking whether gcc -m32 works... no
configure: error: Cannot build a 32-bit program, you need to install 32-bit development libraries.
На ubuntu нужно сделать лишь apt-get install gcc-multilib
, но вот в porteus, я пытался установить эти библиотеки разработчиков по этой инструкции https://docs.slackware.com/ru:slackware:multilib . Появляются только ошибки связанные с glibc и компилятор в добавок ломается.
Попробовал скомпилировать glibc из исходников. Это получается, но нужны 32 битные библиотеки, потому-что проверочный хелловорлд (proba.c):
#include<stdio.h>
int main() {printf ("This\n");}
не компилируется на 32-битной архитектуре:
root@porteus:/# gcc -m32 /mnt/sda3/proba.c
In file included from /usr/include/features.h:474,
from /usr/include/bits/libc-header-start.h:33,
from /usr/include/stdio.h:27,
from /mnt/sda3/proba.c:1:
/usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-32.h: No such file or directory
7 | # include <gnu/stubs-32.h>
| ^~~~~~~~~~~~~~~~
compilation terminated.
root@porteus:/# gcc /mnt/sda3/proba.c
root@porteus:/# ./a.out
This
Но на 64, всё хорошо.
Вопросы. Как мне добавить 32-битные библиотеки разработчика для компиляции wine? Или с каким флагом указать компилятору создавать мультифиблиотечные библиотеки?
Вот какие флаги использую для компиляции glibc.
../configure --prefix=`pwd`/libc
Возможно нужно добавлять флаги –libdir и указывать на 32-битные библиотеки, но не уверен, что у меня появится stubs-32.h в директории include/gnu без дополнительных флагов. Есть ещё –enable-multi-arch, но думаю, что это не то. -m32 не работает для компиляции. Потому что не знаю как менять значения компиляции по умолчанию. Где их найти или название переменной где записаны для gcc g++.
Вот ещё. есть флаг –disable-multilib
root@porteus:# gcc -v
Reading specs from /usr/lib64/gcc/x86_64-slackware-linux/9.1.0/specs
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-slackware-linux/9.1.0/lto-wrapper
Target: x86_64-slackware-linux
Configured with: ../gcc-9.1.0/configure --... --... --disable-multilib --... --...
Thread model: posix
gcc version 9.1.0 (GCC)
Вопрос в том, как его изменить на –enable-multilib и если я буду компилировать с ним, то будет ли включена поддержка мультибиблиотечности? (дальше странный вопрос, на который хочется ответ) Он включается так ./configure –enable-multilib? или надо в make задавать? make –enable-multilib
Но я знаю, что можно указать –enable-win64 и всё будет хорошо компилироваться, но 32-битные приложения я не смогу запустить с такой программы, а мне нужна поддержка 32-битных программ.
У ubuntu такой список пакетов, который устанавливается после apt-get install gcc-multilib
gcc-9-multilib gcc-multilib lib32asan5 lib32atomic1 lib32gcc-9-dev
lib32gomp1 lib32itm1 lib32quadmath0 lib32ubsan1 libc6-dev-i386 libc6-dev-x32
libc6-x32 libx32asan5 libx32atomic1 libx32gcc-9-dev libx32gcc-s1 libx32gomp1
libx32itm1 libx32quadmath0 libx32stdc++6 libx32ubsan1
Перемещено Shaman007 из admin