Возможно, это было задано ранее, однако я нашел его только в контексте классов, и это не так.Ошибка связи при использовании связи статической библиотеки
Utils.h
#ifndef _UTILS_H_
#define _UTILS_H_
#include <cmath>
//is 'x' prime?
bool isPrime(long long int x);
//find the number of divisors of 'x' (including 1 and x)
int numOfDivisors(long long int x);
#endif //_UTILS_H_
Utils.cpp
#include "Utils.h"
bool isPrime(long long int x){
if (x < 2){
return false;
}
long double rootOfX = sqrt(x);
long long int flooredRoot = (long long int)floor (rootOfX);
for (long long int i = 2; i <= flooredRoot; i++){
if (x % i == 0){
return false;
}
}
return true;
}
int numOfDivisors(long long int x){
if (x == 1){
return 1;
}
long long int maxDivisor = (x/2) + 1;
int divisorsCount = 0;
for (long long int i = 2; i<=maxDivisor; i++){
if (x % i == 0){
divisorsCount++;
}
}
divisorsCount += 2; //for 1 & x itself
return divisorsCount;
}
Эти два файла были собраны с Visual Studio 2012 в режиме отладки, как статическая библиотека. Теперь я пытаюсь использовать их в отдельном проекте, назовем его MainProject:
1. Добавьте решение «Utils.vcproj» в MainProject.
2. Сделайте MainProject зависеть от Utils
3. В окне "Свойства" -> "линкер" -> "Input" -> "Дополнительные зависимости" положить путь к Utils.lib
Вот основной, который использует Utils:
#include <iostream>
#include "..\Utils\Utils.h"
using namespace std;
int main(){
cout << "num of divisors of " << 28 << ": " << numOfDivisors(28) << endl;
//this part is merely to stop visual studio and look at the output
char x;
cin >> x;
return 0;
}
И это ошибка я получаю:
Error 1 error LNK2019: unresolved external symbol "int __cdecl numOfDivisors(__int64)" ([email protected]@[email protected]) referenced in function _main G:\ProjectEuler\Problem12\Source.obj Problem12
Почему не может его найти код, который реализует "numOfDivisors"? Я дал ему .lib, который содержит его, более того - ставит зависимость от самого проекта Utils ... Любая помощь будет оценена.
Является ли ваша библиотека скомпилированной как 'C' или как' C++'? – SomeWittyUsername
Где я могу это проверить? – BegemoD