У меня есть 4 отдельные функции в 4 разных файлах. Функции выглядят так:
SieveOfEratosthenes. cpp
bool SieveOfEratosthenes(int n) {
//
}
Все они не имеют включений. В моей основной. cpp программе у меня есть
//Includes
void compare(bool (*f)(int)) {
//
}
int main(int argc, char **argv) {
compare(isPrimeAKS);
compare(isPrimeModulo);
compare(isPrimeSQRT);
compare(SieveOfEratosthenes);
return 0;
}
Это мой make-файл:
all: main clean
main: main.cpp lib.so
g++ -o main main.cpp -L.
lib.so: EratosthenesSieve.o AKS.o ModuloAlg.o SQRTModuloAlg.o
g++ -shared -o lib.so AKS.o ModuloAlg.o SQRTModuloAlg.o EratosthenesSieve.o
EratosthenesSieve.o: EratosthenesSieve.cpp
g++ -c -Wall -fpic EratosthenesSieve.cpp
AKS.o: AKS.cpp
g++ -c -Wall -fpic AKS.cpp
ModuloAlg.o: ModuloAlg.cpp
g++ -c -Wall -fpic ModuloAlg.cpp
SQRTModuloAlg.o: ModuloAlg.cpp
g++ -c -Wall -fpic SQRTModuloAlg.cpp
clean:
rm -f *.o
Компиляция ошибок в main (после сборки общей библиотеки lib.so) с ошибками вроде :
'isPrimeAKS' не было объявлено в этой области.
Я не понимаю, почему, поскольку все они находятся в библиотеке, предоставляемой компилятору.
РЕДАКТИРОВАТЬ, если у вас возникла та же проблема: после объявления в заголовке проблема становится
неопределенная ссылка на isPrimeAKS (int), см. Принятый ответ почему.