Компиляция 32-битного приложения на 64-битном, не может найти -lX11


9

Я вызываю команду как:

g++ ... -o"myapp" -lX11 ...

И получать

/usr/bin/ld: cannot find -lX11

Я установил следующие пакеты для поддержки multiarch:

ia32-libs, libc6-dev-i386 and g++-multilib

Но безрезультатно. В каталоге / usr / lib32, похоже, нет никакого X11.so, на самом деле в этом каталоге всего 52 библиотеки. У меня такое впечатление, что вы должны вручную устанавливать библиотеки, но я не знаю, что мне делать дальше.

Любая помощь приветствуется.


1
Можете ли вы показать вывод команды ldconfig -p | grep libX11\\.?
Мартин Дирихс

Ответы:


5

Вам нужны заголовочные файлы, которые предоставляются -devпакетами, а не в самих пакетах библиотеки. Итак, попробуйте установить libx11-dev. Это должно исправить эту конкретную ошибку сборки, хотя вы можете получить аналогичные ошибки о других библиотеках (а затем вы можете установить их -devпакеты).

Несмотря на то, что эти пакеты предоставляют файлы заголовков, а не двоичные файлы, и в общем случае файлы заголовков учитывают все поддерживаемые архитектуры благодаря использованию макросов препроцессора, тем не менее -devпакеты в Ubuntu, как правило, зависят от архитектуры, и это так libx11-dev(как можно видеть) здесь , развернув выпуск и найдя .debпакеты, перечисленные libx11-devв этом выпуске). Поскольку ваша система Ubuntu является 64-битной, и вы компилируете 32-битную программу, которая должна ссылаться на 32-битную версию библиотеки, вам, вероятно, потребуется установить 32-битную версию libx11-dev. Если вы устанавливаете с помощью apt-getили aptitude, вы можете указать это, указав libx11-dev:i386в качестве пакета для установки (так как Multarch поддерживается и используется).

http://packages.ubuntu.com/ - хороший ресурс для поиска имени -devпакета, соответствующего пакету библиотеки. Это не всегда сразу за именем пакета библиотеки -dev; иногда номера версий, присутствующие в имени пакета библиотеки, особенно после a -, отсутствуют в имени соответствующего -devпакета.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.