Как скомпилировать / собрать и запустить программу Objective-C в Ubuntu с помощью Terminal?
Итак, у меня есть базовый сценарий "hello world" для Objective-C, у меня Ubuntu на моем ноутбуке, и я хочу использовать Ubuntu, чтобы начать компилировать базовые идеи, дополнительные классы или что-нибудь, что стоит написать для любого из моих текущих проектов, на ходу, таким образом, я могу немного кодировать, где бы я ни был, и не всегда должен быть на моем iMac.
Теперь мой единственный вопрос: как мне собрать и запустить этот код в терминале? Очевидно, что это не так важно, так как я пишу для iOS и OSX, поэтому единственный код, который будет отображаться, это что-нибудь, что не вызывает скрипты SDK или Cocoa, поэтому в основном он должен отображать только основные текстовые команды, такие как "NSLog" или как бы то ни было, вы получаете именно то, что я пытаюсь сделать, чего я и хочу. Таким образом, я могу проверить, по крайней мере, на наличие мелких ошибок.
Я осмотрелся и нашел несколько подсказок для сценариев оболочки по умолчанию и таких, которые вызывают каталог gcc или что-то в этом роде, насколько я понимаю. Я создал свою собственную папку для проектов Objective-C, расположенную в моих документах, и я понятия не имел, влияет ли это на мою способность запускать файл, используя команды терминала, которые я пробовал, или нет, но в случае, если это я сохраняю проекты в:
Главная> Документы>Objective-C>helloworld.m
Также при запуске командной строки:
gcc -o helloworld.m
или это
gcc -I/home/caseyerdmann/Documents/Objective-C/helloworld.m
или любой версии этой командной строки я получаю эту ошибку:
gcc: fatal error: no input files
compilation terminated.
Я полагаю, что у меня установлены все файлы компилятора, но я не против полного урока, что бы это ни запустило. Теперь, чтобы уточнить и собрать визуальную помощь для вас, ребята, чтобы попытаться помочь мне лучше, мой текстовый файл находится в моих документах:
И вы можете визуально увидеть каталог, в котором он находится. Теперь, когда я запускаю любую из команд выше, которые я пробовал в терминале, это дает следующий результат:
Неважно, какую команду я использую, это всегда так. Я надеюсь, что это поможет немного больше ответить на мою ситуацию. Я не против полного урока и необходимости сохранять свой файл в другом месте или вносить любые другие изменения любым способом, на самом деле это будет оценено! Я просто хотел бы запустить это.
Я провел некоторое исследование и заметил, что ответы на этот вопрос уже помогают мне запустить скрипт hello.m, входящий в библиотеки GNUstep, это не то, что я пытаюсь сделать. Однако, поскольку у меня возникают проблемы с запуском скрипта по умолчанию, я думаю, что у меня может быть и другая проблема, я собираюсь продолжить исследование, чтобы посмотреть, смогу ли я запустить этот скрипт, в то же время любая помощь будет оценена по достоинству!
ОБНОВЛЕНИЕ: я попробовал новую команду и дал новый результат, хотя он также был неудачным при компиляции, я думаю, что это может помочь ответить другим, чтобы ответить на этот вопрос. Вот что я попробовал:
gcc -o helloworld.m -lobjc
и это был результат:
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
4 ответа
Я провел небольшое исследование и нашел решение, которое работает на данный момент. Я, вероятно, отправлю новый вопрос, чтобы узнать, есть ли способ сократить это. Но это успешно компилирует мой код. Спасибо всем, кто оказал некоторую помощь, я определенно узнал кое-что новое.
gcc -o hello hello.m \
-I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \
-L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
-lgnustep-base -fconstant-string-class=NSConstantString \
-D_NATIVE_OBJC_EXCEPTIONS
В Ubuntu 14.04 LTS продолжайте и установите компилятор GNU target-c:
sudo apt-get install gobjc
Проверьте версию:
gcc --version
должен сказать что-то вроде:
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
....
Установите библиотеки разработки GNUStep (эквивалентно Cocoa в macosx):
sudo apt-get install gnustep-devel
Он должен работать и компилироваться с:
gcc HelloWorld.m `gnustep-config --objc-flags` `gnustep-config --base-libs` -o HelloWorld
Вы должны работать с:
./HelloWorld
Вам не хватает имени для исполняемого файла. Итак, команда должна быть такой:
gcc -o hello helloworld.m
После компиляции введите
./hello
-o hello
указывает имя выходного файла, который вы хотите создать после компиляции исходного кода. (В этом случае имя выходного файла hello
.) Это создаст исполняемый файл (с именем hello
) который вы затем можете запустить непосредственно из терминала. Если вы не используете -o
во время компиляции имя исполняемого файла будет a.out
по умолчанию. Теперь, чтобы выполнить эту программу, вам нужно набрать
./hello
Приведенные выше команды предполагают, что вы уже находитесь в расположении исходных файлов, но и исходный файл, и целевой выходной файл также могут быть указаны в качестве каталога. Например:
gcc -o ~/Projects/hello ~/Desktop/hello.c
скомпилирует исходный файл C, расположенный на вашем рабочем столе, и поместит исполняемый файл в Projects
папка в вашем домашнем каталоге. Чтобы запустить этот исполняемый файл, введите;
./Projects/hello
Или вы также можете сначала перейти в каталог, где находится исходный файл, и запустить над командами. Вам не нужно указывать пути, если вы находитесь в той же директории, где находится исходный файл.
Мне интересно, почему ваше расширение файла .m
вместо .c
,
gcc -o hello hello.m
должен создать целевой файл c, если установлен компилятор. Если нет, установите его:
sudo apt-get install gobjc