Ir ao conteúdo

Posts recomendados

Postado

Estou em uma plataforma Windows utilizando VS code, com o gcc do mingw de compilador e a extensão code runner do Vscode para rodar o código, eu tenho todos esses arquivos citados abaixo na mesma pasta e mesmo assim está dando esse erro.

 

main.c:

#include <stdio.h> 
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
  
#include "funcoes.h"
int main(){
  helloworld();
  getch();
  return 0;
  }

funcoes.c:

#include <stdio.h> 
#include <stdlib.h> 
#include <conio.h> 
#include <windows.h> 

#include "funcoes.h" 

void helloworld(){
  printf("Hello World");
  }

funcoes.h:

#ifndef FUNCOES_H_INCLUDED
#define FUNCOES_H_INCLUDED

void helloworld();

#endif // FUNCOES_H_INCLUDED

Mensagem de erro: 

PS D:\Projetos\Allegroteste> cd "d:\Projetos\Allegroteste\" ; if ($?) { gcc tempCodeRunnerFile.c -o tempCodeRunnerFile } ; if ($?) { start .\tempCodeRunnerFile } C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\GUSTAV~1\AppData\Local\Temp\ccVT118J.o:tempCodeRunnerFile.c:(.text+0xe): undefined reference to `helloworld' collect2.exe: error: ld returned 1 exit status PS D:\Projetos\Allegroteste>

 

  • Curtir 1
Postado
2 horas atrás, Gustavo Poroca disse:

Estou em uma plataforma Windows utilizando VS code, com o gcc do mingw de compilador e a extensão code runner do Vscode para rodar o código, eu tenho todos esses arquivos citados abaixo na mesma pasta e mesmo assim está dando esse erro

 

Visual Studio Code não tem a noção de dependência ou de projeto como em Visual Studio ou outros IDE.

 

Ele não vai descobrir as dependências. Encontra o header porque está lá no include, bem definido.

 

Visual Studio em geral combina bem com CMake ou make, usando os tradicionais Makefiles que listam o que depende do que. Sugiro ir por esse caminho porque é profissional e multi-plataforma.

 

O próprio compilador gcc é distribuído com um makefile. clang, o outro compilador, usa CMake para compilar. O compilador da Microsoft, CL, é privado e não tem o fonte pra compilar.

 

O jeitinho

 

É preciso arrumar uma maneira de informar ao linker, o tal ld, quais são os outros arquivos de código. E a solução ingênua do VS Code é colocar TODOS que tem na pasta na lista para o gcc. Claro que se você

  • tem uma pasta para cada projeto
  • não tem nada duplicado pode viver com isso ;) 

 

Até ter várias versões de helloworld() por exemplo, em helloword1.c, helloword2.c e tal. E querer testar todas com o MESMO main.c, e vai descobrir que deu problema :D 

 

No Linux VCCode faz isso, coloca todos os .c na lista.

 

Pra fazer igual apenas edite tasks.json e onde está

 

			"args": [
				"-g",
				"${file}",
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe"
			],

 

troque por

 

			"args": [
				"-g",
				"${fileDirname}/*.c",
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe"
			],

 

O óbvio:  ao invés de passar só o main.c passa TODOS os .c da pasta. 

 

É uma ideia ruim, como expliquei. 

 

Note que pode criar um outro task na lista, ao invés de editar. E dar um nome significativo, tipo "Compila todos os .c da pasta e roda" ;) Basta usar control-C control-V e por uma vírgula no meio.

 

 

Talvez deva mudar o título. Nada tem a ver com essa extensão.

 

"como acrescentar outros arquivos C no build no VS Code em Windows

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...