0

При попытки компиляции файла через 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 Answers1

0

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

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

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

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

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

AlexGlebe
  • 17,227