g++ не компилирует файл (не видит функции)

При попытки компиляции файла через g++ выдаёт ошибку:

dminn@adminn:~/myprog$ g++ -I/home/adminn/mylib -L/home/adminn/mylib test.cpp -lmyfunc -o test
/usr/bin/ld: /tmp/cctCKXoC.o: в функции «main»:
test.cpp:(.text+0x766): неопределённая ссылка на «calculateAverage(std::vector<double, std::allocator<double> >&)»
/usr/bin/ld: test.cpp:(.text+0x7ed): неопределённая ссылка на «calculateStandardDeviation(std::vector<double, std::allocator<double> >&)»
/usr/bin/ld: test.cpp:(.text+0x874): неопределённая ссылка на «calculateVariance(std::vector<double, std::allocator<double> >&)»
collect2: error: ld returned 1 exit status

Использую

g++ -fPIC -c myfunc.cpp -o myfunc.o
g++ -shared myfunc.o -o libmyfunc.so
g++ -I/home/adminn/mylib -L/home/adminn/mylib test.cpp -lmyfunc -o test

Файлы библиотеки выглядят так:

mylib.cpp

#include "myfunc.h"

#include <algorithm>

#include <math.h>


double calculateAverage(const std::vector<double>& numbers) {

    double sum = 0.0;

    for (double number : numbers) {

        sum += number;
    }

    return sum / numbers.size();

}



double calculateVariance(const std::vector<double>& numbers) {

    double mean = calculateAverage(numbers);

    double variance = 0;

    for (int num : numbers) {

        variance += pow(num - mean, 2);

    }

    return variance / numbers.size();

}



double calculateStandardDeviation(const std::vector<double>& numbers) {

    double mean = calculateAverage(numbers);

    double variance = 0;



    for (int num : numbers) {

        variance += pow(num - mean, 2);

    }



    variance /= numbers.size();

    return sqrt(variance);

}

mylib.h

#pragma once

#include <vector>

#define myfunc_H



double calculateAverage(std::vector<double>& numbers);

double calculateVariance(std::vector<double>& numbers);

double calculateStandardDeviation(std::vector<double>& numbers);

Ответы (1 шт):

Автор решения: AlexGlebe

декларация функции :

double calculateAverage(std::vector<double>& numbers);

указывает на неизвестную функцию. Неизвестная она потому-что вы реализовали с другими типами :

double calculateAverage(const std::vector<double>& numbers){
..
}

А ссылки std::vector<double>& и const std::vector<double>& обозначают разные типы и функции с разным типом аргументов для C++ - разные.

→ Ссылка