Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultados c

1. Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultados c

Lendel dos Santos Rodrigues
lendel

(usa Linux Mint)

Enviado em 07/05/2016 - 17:20h

estou com problemas ao tentar compilar arquivos em C que tenham funções matematicas, aparece na tela a seguinte visualização

lendel@lendel-laptop:~/Pasta C/Teste$ gcc MetodoEuler.c -o Euler
/tmp/ccMB0fW3.o: na função `main':
MetodoEuler.c:(.text+0x7d): referência indefinida para `sin'
collect2: error: ld returned 1 exit status

isso na função seno

/tmp/ccznobyR.o: na função `y':
MetodoEuler1.c:(.text+0x45): referência indefinida para `expf'
collect2: error: ld returned 1 exit status

para compilar digito o comando "-lm" no final e mesmo assim não apresenta um resultado correto
lendel@lendel-laptop:~/Pasta C/Teste$ gcc MetodoEuler1.c -o Euler1 -lm

a versão do meu linux

jessie/sid
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.10
DISTRIB_CODENAME=wily
DISTRIB_DESCRIPTION="Ubuntu 15.10"
NAME="Ubuntu"
VERSION="15.10 (Wily Werewolf)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 15.10"
VERSION_ID="15.10"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

usando o comando uname -a

lendel@lendel-laptop:~/Pasta C/Teste$ uname -a
Linux lendel-laptop 4.2.0-35-generic #40-Ubuntu SMP Tue Mar 15 22:15:45 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux



  


2. Re: Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultad

Paulo Henrique
MrCrawl3r

(usa Ubuntu)

Enviado em 07/05/2016 - 17:22h

Pode nos mostrar os trecho do código que chamam estas funções? Pode ser algo errado nele...

--------------------------------------------------
Att,
Mr Crawler.

O mundo depende dos computadores. Tenha total domínio sobre os computadores e domine o mundo!


3. Re: Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultados c

Lendel dos Santos Rodrigues
lendel

(usa Linux Mint)

Enviado em 07/05/2016 - 17:33h

Aqui estão os codigos meu amigo

utilizando a função seno

/*==========================*/
/* Método de Euler */
/*==========================*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int arc, char* argv[])
{
double tn, tn1, tmax; /* variáveis tn e tn+1 */
double xn, xn1; /* variáveis xn e xn+1 */
double x0, t0; /* valores iniciais de x e t */
double h; /* passo */
double fn; /* meu valor da minha função seno*/
int n;

FILE *arq; /*declara um arquivo que será indicado através do ponteiro *arq*/

t0 = 0.0; /* valor incial para t */
x0 = 1.0; /* valor inicial para x */
tmax = 2.0; /* valor máximo para t */
h = 0.001; /* o valor do passo */

tn = t0;
xn = x0;
n = 0; /* numero de iterações */


//arq=fopen("MetodoEuler1.dat","w"); /*cria o arquivo MetodoEuler1.dat e abre para poder escrever nele*/

while(n < tmax){
fn = sin(xn*3.14159265/180);
//fn=-xn; //A resposta deve ser uma exponencial: x(t)=exp(-t)
printf("%d %f %f %f\n",n,tn,xn,fn); /*escreva os valores das variáveis na tela*/

tn1 = tn + h;
xn1 = xn + h*fn; /* estime xn+1 pelo método de Euler */
n = n+1; /* Atribua os valores para a próxima iteração */
//fprintf(arq,"%d %f %f %f\n",n,tn1,xn1,fn); /*escreva os valores das variáveis no arquivo apontado por arq*/
xn = xn1;
tn = tn1;
}/* while */

//fclose(arq); // fecha o arquivo apontado por arq
return 0; /* termina a computação */
}/* main */


utilizanndo a função expf

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double y(double x) /* a solução y(t) da equação */
{
return (1.0/4.0)*x-(3.0/16.0)+(19.0/16.0)*expf(4.0*x);
}
double f(double x, double y) /* a função f(x,y)*/

{
return 1-x+4*y;
}

int main(int arc, char* argv[])
{
double xn, xn1, xmax; /* variáveis tn e tn+1 */
double yn, yn1; /* variáveis yn e yn+1 */
double y0, x0; /* valores iniciais de y e t */
double h; /* passo */
int n;

x0 = 0.0; /* valor incial para t */
y0 = 1.0; /* valor inicial para y */
xmax = 2.0; /* valor máximo para t */
h = 0.001; /* o valor do passo */

xn = x0;
yn = y0;
n = 0; /* numero de iterações */
while(xn < xmax){
printf("%i %f %f %f\n",n,xn,yn,y(xn)); /*escreva os valores das variáveis*/
yn1 = yn + h*f(xn,yn); /* estime yn+1 pelo método de Euler */
xn1 = xn + h;
n = n+1; /* Atribua os valores para a próxima iteração */
yn = yn1;
xn = xn1;
}/* while */
return 0; /* termina a computação */
}/* main */



4. Re: Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultad

Paulo Henrique
MrCrawl3r

(usa Ubuntu)

Enviado em 07/05/2016 - 17:48h

Testei exatamente o seu código com o gcc, deu o erro que você mencionou. Mas... todavia... entretanto... quando testei com o g++, seu código compilou normalmente.

paulo@son-of-a-bit:~/Documentos/bla/bla/bla/bla/$ g++ test.c -o test
paulo@son-of-a-bit:~/Documentos/bla/bla/bla/bla/$ ./test
0 0.000000 1.000000 0.017452
1 0.001000 1.000017 0.017453
paulo@son-of-a-bit:~/Documentos/bla/bla/bla/bla/$ g++ test2.cpp -o test2


*edit*

Meu conhecimento de C/C++ não é avançado, mas devo supor que o gcc não suporta a biblioteca Math.h, então é só você usar o g++ mesmo =]

Se ajudei, marque o tópico como resolvido =]
--------------------------------------------------
Att,
Mr Crawler.

O mundo depende dos computadores. Tenha total domínio sobre os computadores e domine o mundo!


5. Re: Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultad

Paulo
paulo1205

(usa Ubuntu)

Enviado em 07/05/2016 - 18:46h

Diagnóstico errado.

O problema é que a biblioteca matemática não é incluída por padrão na última etapa de produção do executável, que é o momento em que executa o linker.

Quando você diz “#include <math.h>”, você diz apenas ao compilador quais os nomes das funções e a forma que elas têm (tipos de dados recebidos como parâmetros e tipo do valor de retorno), mas não embute realmente as funções no programa final. Isso só ocorre numa etapa posterior à compilação, que, como eu disse acima, se chama “linking”, ou “ligação”, ou “link-edição”.

Talvez você não se dê conta de que a produção do executável tem várias fases, porque o GCC geralmente chama o linker automaticamente. Você pode dizer para o GCC, nesse caso, invocar a biblioteca matemática, do seguinte modo.

gcc nome_do_fonte.c -o nome_do_executavel -lm 



6. Re: Problema com a biblioteca <math.h> (função sin, exp, cos etc) as funções não apresentam resultados c

Paulo Henrique
MrCrawl3r

(usa Ubuntu)

Enviado em 07/05/2016 - 18:55h

paulo1205 escreveu:

Diagnóstico errado.

O problema é que a biblioteca matemática não é incluída por padrão na última etapa de produção do executável, que é o momento em que executa o linker.


Não sabia disso, obrigado por esclarecer.



--------------------------------------------------
Att,
Mr Crawler.

O mundo depende dos computadores. Tenha total domínio sobre os computadores e domine o mundo!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts