LINUX.ORG.RU

Сборка 32 bit приложения для запуска на 64 bit платформе

 ,


0

1

Собираю приложение, старый проект который был кем то писан. При make падает ошибка:

In file included from /usr/include/glib-2.0/glibconfig.h:9:0,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gts.h:24,
                 from src/delaunay/segment.hpp:6,
                 from src/delaunay/contour.hpp:5,
                 from src/delaunay/contour.cpp:2:
/usr/include/glib-2.0/glib/gtypes.h: In function ‘gboolean _GLIB_CHECKED_ADD_U64(guint64*, guint64, guint64)’:
/usr/include/glib-2.0/glib/gtypes.h:422:3: error: size of array ‘_GStaticAssertCompileTimeAssertion_0’ is negative
   G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
   ^
Полагаю у меня 64 bit GLIB. Поддержку 32 bit архитектур включил. glib-multilibs установлен. Где взять библиотеки под версию 32?



Последнее исправление: Mr_Steve (всего исправлений: 3)

32 bit приложения для запуска на 64 bit платформе

Давно хотел таких криводелов удавить, и вот ты тут. Зачем такое делать?

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

В проекте есть старые самописные библиотеки в формате .so под 32 бита соответственно Исходников у меня нет Если конечно есть вариант собрать это всё на 64, то я буду дюже рад

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

gcc version 5.4.0 20160609. Ось: LinuxMint 18.3. Собираю make с флагом -m32. При сборке на -m64 пишет «пропускаем несовместимые библиотеки»

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

Полный вывод консоли

g++ -c -m32 -pipe -fpermissive -g -g -Wall -W -D_REENTRANT -fPIC -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.8.4/mkspecs/linux-g++-32 -I. -I/usr/local/Trolltech/Qt-4.8.4/include/QtCore -I/usr/local/Trolltech/Qt-4.8.4/include/QtGui -I/usr/local/Trolltech/Qt-4.8.4/include -Iinclude -Isrc/3rdparty -Isrc/poly_math -Isrc/delaunay -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -Isrc/task6 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I../global/src -I../build/Math -I../build/Math/moc -o ../build/Math/obj/contour.o src/delaunay/contour.cpp
In file included from /usr/include/glib-2.0/glibconfig.h:9:0,
                 from /usr/include/glib-2.0/glib/gtypes.h:32,
                 from /usr/include/glib-2.0/glib/galloca.h:32,
                 from /usr/include/glib-2.0/glib.h:30,
                 from /usr/include/gts.h:24,
                 from src/delaunay/segment.hpp:6,
                 from src/delaunay/contour.hpp:5,
                 from src/delaunay/contour.cpp:2:
/usr/include/glib-2.0/glib/gtypes.h: In function ‘gboolean _GLIB_CHECKED_ADD_U64(guint64*, guint64, guint64)’:
/usr/include/glib-2.0/glib/gtypes.h:422:3: error: size of array ‘_GStaticAssertCompileTimeAssertion_0’ is negative
   G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
   ^
Makefile:386: ошибка выполнения рецепта для цели «../build/Math/obj/contour.o»

Mr_Steve
() автор топика
apt-get install libglib2.0-dev:i386
anonymous
()
Ответ на: комментарий от anonymous

Там 32 бита, скорее всего, не long long, а, как ни странно, guint64. Потому что используется хостовый glibconfig.h, в котором прописано typedef unsigned long guint64, ибо гномщикам «и так сойдёт» если это работает на хосте.

@Mr_Steve тебе нужна не просто multilibs и -m32, а полноценная среда для кросс-девелопмента под 32 бита. А ещё правильнее сразу забыть про эти библиотеки и делать нормально.

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