Неопределенный первый символ ссылки в файле

Я получаю эту ошибку, и я не уверен, как это исправить. Это проект по поиску информации, в котором я пытаюсь вычислить tf-idf, используя этот тип (1+log(freq(t,n)))*log(N/k)< /сильный>. freq(t,n) – частота слова, t в файле n и N – число всего файлов, k количество файлов, содержащих слово t.

 Undefined                       first referenced
 symbol                             in file
log                                 /var/tmp//ccx8E8Y1.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

вот моя функция, где я получаю ошибку (у меня есть #include <math.h> в начале):

void makeTF_IDF(char** words,double** weight,char** str){
    int i,j,n,f;
    char nameout[1024],line[1024];
    double tf,idf[1443],t;
    FILE *fin;
    for(i=0;i<1443;i++){
        n=0;
        for(j=0;j<26;j++){
            strcpy(nameout,strtok(str[j],"."));
            strcat(nameout,"out.txt");
            fin=fopen(nameout,"r");
            while(1){
                if(fgets(line,1024,fin)==NULL) break;
                if(strstr(line,words[i])!=NULL){
                    n++;
                    break;
                }
            }
            fclose(fin);
        }
        t=26/n;
        idf[i]=log(t);
    }
    for(i=0;i<1443;i++){
        for(j=0;j<26;j++){
            f=0;
            strcpy(nameout,strtok(str[j],"."));
            strcat(nameout,"out.txt");
            fin=fopen(nameout,"r");
            while(1){
                if(fgets(line,1024,fin)==NULL) break;
                if(strstr(line,words[i])!=NULL) f++;
            }
            weight[j][i]=(log(1+f))*idf[i];
            fclose(fin);
        }
    }
}

person marinos theo    schedule 26.11.2015    source источник
comment
Большое спасибо, я не знал, что мне нужно скомпилировать его таким образом. Я студент ИТ, и я не так много работал на C и специально компилировал-запускал руководителей с помощью терминала. В основном я использую различные IDE.   -  person marinos theo    schedule 26.11.2015
comment
вопрос гласит: вычислить tf-idf, используя этот тип (1+log(freq(t,n)))*log(N/k). freq(t,n), но переменная tf не используется в опубликованном коде   -  person user3629249    schedule 29.11.2015
comment
для удобочитаемости и понятности кода нам, людям, следуйте следующим рекомендациям: только одно выражение в строке. при максимуме только одно объявление переменной на инструкцию. отдельные блоки кода (for, if, else, do...while, whlie, switch, case, default) пустой строкой   -  person user3629249    schedule 29.11.2015
comment
размещенный код содержит несколько «магических» чисел. «магические» числа значительно усложняют чтение/понимание/отладку/обслуживание кода. Итак, примеры из опубликованного кода: 1024, 1443, 26, 8. Предложите использовать #define или перечисление, чтобы дать этим «магическим» числам осмысленные имена, а затем использовать эти осмысленные имена во всем коде. Примечание: в вызовах fgets() вторым параметром должно быть sizeof(line), чтобы размер переменной line[] можно было менять без внесения в программу лишних ошибок   -  person user3629249    schedule 29.11.2015
comment
такая строка: if(strstr(line,words[i])!=NULL) f++; не ищет в массиве **words указателей на массивы символов любое совпадение для каждого word[], и поскольку каждый проход через окружающий цикл while(1) просматривает новую строку.   -  person user3629249    schedule 29.11.2015
comment
возвращаемое значение из этой строки: fin=fopen(nameout,"r"); необходимо проверить (!=NULL), чтобы убедиться, что операция прошла успешно, прежде чем пытаться читать из связанного файла.   -  person user3629249    schedule 29.11.2015


Ответы (1)


Я предполагаю, что вы работаете в среде unix (и если вы пытаетесь создать исполняемый файл только из этого файла, у вас есть основная функция).

Вы должны скомпилировать с помощью такой команды, чтобы искать математическую библиотеку при линковке:

gcc <your_filename.c> -lm

У вас должен быть исполняемый файл с именем a.out в вашем текущем рабочем каталоге после этой команды.

person sestus    schedule 26.11.2015