Среда разработки USB GCC с библиотеками - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь получить что-то вроде среды на USB-накопителе для разработки кода на C ++. Я планирую использовать другие компьютеры, чаще всего linux, для работы над этим из командной строки, используя g ++ и make.

Проблема в том, что мне нужно использовать некоторые библиотеки, такие как Lua и OpenGL, которых нет на компьютерах. Я не могу добавить их в обычные каталоги, у меня нет рута на этих компьютерах. Большинство решений, которые я нашел, включают в себя помещение в / usr / lib / и тому подобное, но я не могу этого сделать. Я также попытался добавить такие параметры, как '-L / media // lib', где они хранятся, и это не сработало. При компиляции я получаю те же ошибки, что и при первом переключении на ОС с неустановленными библиотеками.

Есть ли где-нибудь на компьютере за пределами / usr / я могу их поместить, или способ заставить gcc "увидеть" их?

1 Ответ

2 голосов
/ 02 сентября 2011

Вам нужно больше, чем библиотеки, чтобы иметь возможность компилировать код с использованием этих библиотек.(Я предполагаю, что здесь Linux, вещи могут немного отличаться, например, в OSX, BSD, Cygwin, Mingw ..)

Библиотеки

Для разработки вам понадобятся эти 3 вещи, когда ваш код используетбиблиотека:

  • Заголовочные файлы библиотеки, файлы .h
  • Файлы разработки библиотеки, libXXX.so или libXXX.a, обычно
  • Файлы времени выполнения библиотеки, libXXX.so.Y, где Y - номер версии.Они не нужны, если вы статически создаете ссылки в библиотеке.

Кажется, вам не хватает файлов заголовков (?) Добавьте их на свою флешку, например, в / media / include

Development

  • Используйте (например) флаг компилятора -I/media/include при компиляции исходного кода для ссылки на нестандартное расположение заголовочных файлов.
  • Используйте флаг компилятора / компоновщика -L/media/lib для обозначения нестандартного расположения библиотек.

Возможно, вам не хватает первого шага.

Запуск

Для динамически связанных библиотек система будетзагружайте их только из местоположений по умолчанию, обычно это / lib /, / usr / lib /

Изучите инструмент ldd, чтобы помочь отладить этот шаг.

Вы должны указать системе, куда загружатьдополнительные библиотеки, когда вы запускаете программу, вот 3 варианта:

  • для всей системы: отредактируйте /etc/ld.so.conf и добавьте туда / media / libs.Запустите ldconfig -a впоследствии.
  • Локально, только для текущей оболочки.установите переменную среды LD_LIBRARY_PATH для ссылки на / media / lib, запустите export LD_LIBRARY_PATH=/media/lib
  • Исполняемый файл: Жесткий код нестандартного пути к библиотеке в исполняемом файле.Вы добавляете это к шагу связывания при создании вашего исполняемого файла: -Wl,-rpath,/media/lib

И т. Д.

Могут быть и другие причины, по которым вещи не работают, если так, покажите нам выводиз ls -l / media / libs и куда вы помещаете файлы заголовков библиотеки, командную строку, которую вы используете для компиляции / компоновки, и точные ошибки, которые вы получаете.

  • Отсутствуют заголовки и / илибиблиотеки разработки (для динамических библиотек обычно есть символическая ссылка от libXXX.so к libXXX.so.Y, компоновщику нужен libXXX.so, он не будет смотреть непосредственно на libXXX.so.Y)
  • использование библиотек, несовместимых с вашей текущей ОС / архитектурой.(библиотеки, скомпилированные на одном дистрибутиве Linux, часто несовместимы с другим дистрибутивом или даже с другой минорной версией того же дистрибутива)
  • При использовании USB-флешки с файловой системой FAT32 у вас возникнут проблемы с символическими ссылками.
...