Como compilar / construir e executar o programa Objective-C no Ubuntu usando o Terminal?

7

Então aqui eu tenho o script básico de "hello world" para Objective-C, eu tenho Ubuntu no meu laptop e quero usar o Ubuntu para começar a compilar idéias básicas, classes extras ou qualquer coisa que valha a pena para meus projetos atuais o jeito, de modo que eu possa codificar um pouco onde quer que eu esteja e nem sempre tem que estar no meu iMac.

Agora,minhaúnicaperguntaécomocriareexecutaressecódigonoterminal?Obviamentenãoétãoimportante,jáqueestoucodificandoparaiOSeOSX,entãooúnicocódigoqueseráexibidoéqualquercoisaquenãochameosscriptsSDKouCocoa,entãobasicamenteeledeveexibirapenascomandosdetextobásicoscomo"NSLog" ou seja como for, você entende exatamente o que estou tentando fazer, que é o que eu quero. Dessa forma, posso verificar pequenos erros no mínimo.

Eu olhei em volta e encontrei várias ajudas para scripts de shell padrão e tais que chamam o diretório gcc ou algo do tipo do meu entendimento. Eu criei minha própria pasta para projetos Objective-C localizados em meus documentos e não tinha idéia se isso está afetando minha capacidade de executar o arquivo usando os comandos do terminal que eu tentei ou não, mas no caso é eu armazenar o projetos em:

Início> Documentos > Objetivo-C > helloworld.m

Além disso, ao executar a linha de comando:

gcc -o helloworld.m

ou isto

gcc -I/home/caseyerdmann/Documents/Objective-C/helloworld.m

ou qualquer versão dessa linha de comando eu recebo este erro:

gcc: fatal error: no input files
compilation terminated.

Eu acredito que eu tenho todos os arquivos compiladores instalados, mas eu não me oponho a um tutorial completo, o que quer que funcione. Agora, para esclarecer e reunir uma ajuda visual para vocês tentarem ajudar-me melhor meu arquivo de texto está localizado em meus documentos:

Evocêpodevervisualmenteodiretórioemqueeleécolocado.Agora,quandoeuexecutoqualquerumdoscomandosacimaqueeutenteinoterminal,eleproduzesteresultado:

Não importa qual comando eu uso é sempre isso. Espero que isso ajude um pouco mais a fornecer uma resposta para minha situação. Não me oponho a um tutorial completo e ter que salvar meu arquivo em outro lugar ou fazer quaisquer outras alterações por qualquer meio, na verdade, seria apreciado! Eu adoraria fazer isso funcionar.

Eu fiz algumas pesquisas e notei que as respostas sobre isso já estão me ajudando a executar o script hello.m que vem dentro das bibliotecas GNUstep, isso não é o que estou tentando fazer. No entanto, como estou tendo problemas para executar o script padrão, acho que posso ter outro problema também. Continuarei pesquisando para ver se consigo executar esse script. Nesse meio tempo, qualquer ajuda é bem-vinda!

ATUALIZAÇÃO: Eu tentei um novo comando e obtive um novo resultado, embora também não tenha sido bem sucedido na compilação. Acho que pode ajudar a responder a outros para responder a isso. Isso é o que eu tentei:

gcc -o helloworld.m -lobjc

e este foi o resultado:

/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
    
por Casey 03.08.2013 / 23:33

4 respostas

3

Eu fiz uma pequena pesquisa e encontrei uma solução que funciona por enquanto. Eu provavelmente vou postar uma nova pergunta para ver se há uma maneira de encurtar isso. Mas isso com sucesso compila meu código. Obrigado a todos que deram alguma ajuda, eu definitivamente aprendi algumas coisas novas.

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
    
por Casey 08.08.2013 / 19:48
6

No Ubuntu 14.04 LTS, vá em frente e instale o compilador GNU object-c:

sudo apt-get install gobjc  

Verifique a versão:

gcc --version

deve dizer algo como:

gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
....

Instale as bibliotecas de desenvolvimento GNUStep (equivalente ao Cocoa no macosx):

sudo apt-get install gnustep-devel

Ele deve funcionar e compilar com:

gcc HelloWorld.m 'gnustep-config --objc-flags' 'gnustep-config --base-libs' -o HelloWorld

Você deve correr com:

./HelloWorld
    
por eosorio 23.05.2014 / 07:19
2

Você está perdendo o nome do arquivo executável. Então, o comando deve ser assim:

gcc -o hello helloworld.m

Após a compilação, digite

./hello

-o hello especifica o nome do arquivo de saída que você deseja criar depois que a fonte é compilada. (Nesse caso, o nome do arquivo de saída é hello .) Isso criará um arquivo executável (denominado hello ) que você poderá executar diretamente a partir do terminal. Se você não usar a opção -o durante a compilação, o nome do arquivo executável será a.out por padrão. Agora, para executar esse programa, você precisa digitar

./hello

Os comandos acima presumem que você já esteja no local dos arquivos de origem, mas tanto o arquivo de origem quanto o arquivo de saída de destino também podem ser especificados como um diretório. Por exemplo:

gcc -o ~/Projects/hello ~/Desktop/hello.c

irá compilar um arquivo fonte em C localizado na sua área de trabalho e colocar o binário executável em Projects pasta no seu diretório pessoal. Para executar este executável, digite;

./Projects/hello

Ou você também pode ir primeiro ao diretório em que o arquivo de origem está localizado e executar os comandos acima. Você não precisa especificar nomes de caminho se estiver no mesmo diretório em que seu arquivo de origem está.

Estou me perguntando por que sua extensão de arquivo é .m em vez de .c .

    
por 1lastBr3ath 06.08.2013 / 22:24
0
gcc -o hello hello.m

deve produzir o objetivo c executável se o compilador estiver instalado. Se não, instale-o:

sudo apt-get install gobjc
    
por ubfan1 05.08.2013 / 03:12