компиляция приложений на c ++, чтобы они могли работать и на других компьютерах - PullRequest
3 голосов
/ 10 февраля 2009

Итак, у меня есть очень простое приложение SDL, которое я хочу передать своему другу, не заставляя его загружать целую кучу пакетов SDL.

как я могу это сделать? Мне сказали использовать эту строку для компиляции: (обратите внимание, что я использую Ubuntu Linux и мой друг, и что это приложение компилируется и работает без параметров "-Wl, -Bstatic".)

    g++ test-sdl.cpp -o test-sdl -Wl,-Bstatic -lSDL_image -lSDL

Но тогда я получаю эту ошибку:

    /usr/bin/ld: cannot find -lgcc_s  
    collect2: ld returned 1 exit status

почему я получаю эту ошибку? как мне это исправить? я даже должен сделать это таким образом? Есть ли другой / более простой / альтернативный способ?

Разве я так прошу, желая избавить моего друга от хлопот, связанных с загрузкой пакетов, которые он, вероятно, никогда не будет использовать?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 февраля 2009

В долгосрочной перспективе лучшим вариантом будет выяснить, как создать .debs, и тогда управление пакетами системы вашего друга сможет позаботиться об установке всех необходимых зависимостей. Если вы хотите распространять пакеты более широко, использование собственной системы упаковки, как задумано, избавит вас и ваших пользователей от множества головных болей.

Посмотрите руководство Ubuntu по упаковке и pbuilder .

Лично я узнал, как это сделать для своих собственных проектов (в Debian) из книги Мартина Крафта , и нашел, что использование yada значительно упрощает процесс.

2 голосов
/ 11 февраля 2009

Думаю, вам следует избавиться от -B (это меняет путь поиска, смотрите man g ++, и, следовательно, вы больше не можете найти свои библиотеки).

Переключатель, который вы имели в виду, -статический, без B.

Изменить в ответ на комментарии: извините, это было неполным. Вместо этого замените все слова "-Wl, -Bstatic" просто "-static".

Как пишет codelogic, -static не является опцией для компоновщика (что подразумевает -Wl).

...