Построение 32-разрядного приложения в 64-битном Ubuntu

Ответ fossfreedom быстрее, чем на ум, но это касается пользователей, которые не знали о терминальном пути. Вы можете dconf-editor. Сначала загрузите dconf-editor:

sudo apt-get install dconf-editor

Затем откройте DASH и найдите dconf.

После открытия перейдите в: org -> gnome -> nautilus -> preferences

И здесь вы можете изменить org -> gnome - > nautilus -> предпочтения . В моем случае я отключил этот параметр, потому что он более интуитивно понятен. Я просто начал набирать текст, и я покончил с этим.

Как вы можете видеть на этом пути, это то же самое, что и терминал:

gsettings set org.gnome.nautilus.preferences enable-interactive-search false

Я должен также упомянуть, что вы можете использовать «Double Tab», используя терминальную линию. Я имею в виду, что если вы набираете:

gsettings

, а затем нажмите SPC, а затем TAB, вы будете приветствоваться параметрами для gsettings, одним из которых является установленная опция:

enter image description here

, если мы использовали параметр gsettings и нажмите SPC , затем TAB, мы будем продолжать получать все возможные варианты к каковой фактической конфигурации этой базы данных конфигурации. Таким образом, вы можете TAB самостоятельно найти другие варианты, когда вы не можете запомнить их имена.

20
задан 8 December 2011 в 09:38

4 ответа

LDFLAGS также должен включать -m32. Следующее должно работать:

export LDFLAGS='-m32 -L/usr/lib32'

Фактически вы можете удалить -L/usr/lib32 часть, поскольку это каталог по умолчанию для 32-битных библиотек, и ваша система знает об этом.

В принципе, самый простой способ построить 32-битное приложение на 64-битной машине:

export CFLAGS='-m32'
export CXXFLAGS='-m32'
export LDFLAGS='-m32'
make

.. или передать эти переменные для настройки скрипта, если вы используете autotools.

UPDATE: [ ! d5]

Похоже, вы не очень знакомы с различиями в связи со статическими и динамическими библиотеками. Я постараюсь быть как можно более минимальным:

Как в статических, так и в динамических библиотеках разработки есть одно и то же расширение файла .a. Если вы установили как статические, так и динамические версии одной и той же библиотеки, один из них может имеют дополнительный постфикс, например libname.a для динамического и libname_s.a для статической версии. Конечно, статические и динамические версии библиотеки отличаются по размеру. Статическая версия тяжелее. Если вы связываетесь со статической библиотекой - ваше приложение не имеет зависимостей. Если вы связываетесь с динамической библиотекой, она будет полагаться на библиотеку времени исполнения .so, которая должна присутствовать в вашей системе.

Обратите внимание, что здесь мы не говорим о продвинутых трюках, таких как явная загрузка DSO с использованием API dlopen () / dlsym ().

13
ответ дан 25 May 2018 в 16:08
  • 1
    Теперь я думаю, что что-то не так с моей настройкой. Всякий раз, когда я добавляю -m32 в мою последнюю команду gcc, вместо этого он ищет папку / usr / lib. Если я не добавляю -m32 и не использую флаг -L / usr / lib32, он ищет правильный каталог, но генерирует ошибки выше. Вы знаете, что может вызвать это? – Rich 8 December 2011 в 02:22
  • 2
    И что произойдет, если вы объедините оба (как в моем примере выше)? – Andrejs Cainikovs 8 December 2011 в 02:23
  • 3
    если я совмещаю оба, он по-прежнему не ищет в / usr / lib32. он просто ищет в / usr / lib. И кстати, я использую автоматические инструменты. – Rich 8 December 2011 в 02:33
  • 4
    Странно .. Вы пытались кормить -l/usr/lib32/libXaw.so вместо этого? – Andrejs Cainikovs 8 December 2011 в 02:42
  • 5
    Он не может их найти ....: gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -O2 -L / usr / lib32 -l / usr / lib32 / libXaw.so -l / usr / lib32 / libXmu.so -l / usr / lib32 / libXt.so -l / usr / lib32 / libXext.so -l / usr / lib32 / libX11.so -l / usr / lib32 / libSM.so -l / usr / lib32 / libICE.so -m32 / usr / bin / ld: не удается найти -l / usr / lib32 / libXaw.so – Rich 8 December 2011 в 03:06

LDFLAGS также должен включать -m32. Следующее должно работать:

export LDFLAGS='-m32 -L/usr/lib32'

На самом деле вы можете удалить -L/usr/lib32 часть, поскольку это каталог по умолчанию для 32-битных библиотек, и ваша система знает об этом.

В принципе, самый простой способ построить 32-битное приложение на 64-битной машине:

export CFLAGS='-m32'
export CXXFLAGS='-m32'
export LDFLAGS='-m32'
make

.. или передать эти переменные для настройки скрипта , если вы используете autotools.

UPDATE:

Похоже, вы не очень знакомы с различиями в связи со статическими и динамическими библиотеками. Я постараюсь быть как можно более минимальным:

  • И статические, и динамические библиотеки разработки имеют одинаковое расширение файла .a
  • Если вы установили как статическую, так и динамическую версии одной и той же библиотеки, у одного из них может быть дополнительный постфикс, например libname.a для динамического и libname_s.a для статической версии.
  • Конечно, статические и динамические версии библиотек различаются по размеру. Статическая версия более тяжелая.
  • Если вы связываетесь со статической библиотекой - ваше приложение не имеет зависимостей. Если вы связываетесь с динамической библиотекой, она будет полагаться на библиотеку времени исполнения .so, которая должна присутствовать в вашей системе.

Обратите внимание, что мы не говорим о продвинутых трюках, таких как явная загрузка DSO использует API dlopen () / dlsym ().

13
ответ дан 6 August 2018 в 02:35

Я получал такие ошибки, как:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.so when searching for -lstdc++

Это исправило это для меня:

sudo apt-get install g++-multilib

, если вы используете gcc-пакет, отличный от стандартного (например, gcc-7), вам необходимо установить пакет для этой конкретной версии:

sudo apt-get install g++-7-multilib
5
ответ дан 25 May 2018 в 16:08
  • 1
    g++-multilib для g ++ (C ++), для gcc (C) вам также нужно gcc-multilib. – pevik 4 October 2017 в 18:48

Я получал такие ошибки, как:

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libstdc++.so when searching for -lstdc++

Это исправило это для меня:

sudo apt-get install g++-multilib

, если вы используете gcc-пакет, отличный от стандартного (например, gcc-7), вам необходимо установить пакет для этой конкретной версии:

sudo apt-get install g++-7-multilib
6
ответ дан 31 July 2018 в 11:39

Другие вопросы по тегам:

Похожие вопросы: