Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Undefined reference to 'cos'

juhohe [08.05.2009 15:48:30]

#

Hei,

minulla on sellainen kirja lainassa kuin Introducing Speech and Language Processing. Kirjan mukana on cd, jossa on useita c- ja prolog-ohjelmia. Mutta kun yritin kääntää tätä tiedostoa komennolla "gcc -o coswave coswave.c", kääntäjä herjaa jotakin, että undefined reference to 'cos'. Mitenköhän ohjelman saisi toimimaan?

En tunne c:tä ollenkaan, mutta haluaisin kokeilla tätä ohjelmaa. Olen nyt Python-kurssilla, mutta sen enempää en ohjelmointia osaakaan.

Tässä lähdekoodi:

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

/* COSWAVE.C - Generates a cosine wave: 8000 samples, 1 s, 200Hz	*/
/* (when played at 8000 samples/s), called cosine.dat		*/

int main()
{
    int length, status, i;
    short int *x;			/* a pointer to the array of samples */
    float freq;
    double arg, twopi;
    FILE *file_id;

    length = 8000;
    freq = 0.025;
    twopi = 8.0*atan(1.0);            	/* calculate 2*PI 	*/
    arg = twopi * freq;

/* allocate the sample array and set its cells to zero 		*/
    x = (short int *) calloc(length,sizeof(short int));
    if(!x) {
        printf("Unable to allocate space for samples\n");
        exit(1);
    }

/* Loop over the length of the array of samples 			*/
/* Luulen, etta hairio on tassa kohtaa                                  */
    for (i = 0 ; i < length ; i++)
        x[i] = (short int) 32000 * cos(i*arg);

    file_id = fopen("cosine.dat","wb");
    if(file_id == NULL) {
        printf("Unable to open file\n");
        exit(1);
    }
    status = fwrite(x,sizeof(short int),length,file_id);
    if(status < length) {
        printf("Unable to write all samples\n");
        exit(1);
    }
    fclose(file_id);
    return 0;
}

Blaze [08.05.2009 15:55:27]

#

Lisää käännöskomentoosi -lm, joka linkkaa mukaan matematiikkakirjaston (nimeltään yksinkertaisesti m).

Metabolix [08.05.2009 15:56:26]

#

Lisää kääntäjälle parametri -lm, joka linkittää matematiikkakirjaston mukaan ohjelmaan. Hassua, että toisinaan GCC vaatii tuon mutta toisinaan ei: ainakin Arch Linuxin tämänhetkinen GCC linkittää tuon automaattisesti.

Kannattaa opetella tosiaan erottamaan käännösvirheet ja linkitysvirheet. Jälkimmäiset tunnistaa usein siitä, ettei niissä ilmoiteta rivinumeroa (koska linkitysvaiheessa ei enää ole koodirivejä vaan konekieltä).

juhohe [09.05.2009 14:00:13]

#

Kiitos, sain sen nyt toimimaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta