I am trying to create a function in player.cpp that calls on a package that I downloaded. It evaluates equity for a poker hand. When I run my Makefile, I keep getting errors that various functions from classes in the package were not found. The package has already been built using the cmake file from the developer.
Here is player.cpp:
#include "player.hpp"
#include <boost/program_options.hpp>
#include <vector>
#include <random>
#include <boost/range/counting_range.hpp>
#include <boost/config.hpp>
#include <boost/range/irange.hpp>
#include <iostream>
#include <string>
#include <nit/eval/card_set.h>
#include <nit/eval/card.h>
namespace po = boost::program_options;
std::vector<nit::EquityResult> Player::calc_equity(std::string hand, std::string board)
{
std::string game = "h";
std::unique_ptr<nit::PokerHandEvaluator> evaluator = nit::makeEvaluator(game);
std::vector<nit::CardDistribution> handDists;
handDists.emplace_back();
handDists.back().parse(hand);
handDists.emplace_back();
handDists.back().fill(evaluator->handSize());
nit::ShowdownEnumerator showdown;
std::vector<nit::EquityResult> results = showdown.calculateEquity(handDists, nit::CardSet(board), *evaluator);
return results;
}
Here is the error message:
Undefined symbols for architecture x86_64:
"nit::makeEvaluator(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
Player::calc_equity(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in player-3c5ae7.o
"nit::CardDistribution::fill(int)", referenced from:
Player::calc_equity(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in player-3c5ae7.o
"nit::CardDistribution::CardDistribution(nit::CardDistribution const&)", referenced from:
void std::__1::allocator<nit::CardDistribution>::construct<nit::CardDistribution, nit::CardDistribution const&>(nit::CardDistribution*, nit::CardDistribution const&&&) in player-3c5ae7.o
"nit::CardDistribution::CardDistribution()", referenced from:
void std::__1::allocator<nit::CardDistribution>::construct<nit::CardDistribution>(nit::CardDistribution*) in player-3c5ae7.o
"nit::ShowdownEnumerator::ShowdownEnumerator()", referenced from:
Player::calc_equity(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in player-3c5ae7.o
"nit::CardSet::CardSet(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
Player::calc_equity(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in player-3c5ae7.o
"nit::ShowdownEnumerator::calculateEquity(std::__1::vector<nit::CardDistribution, std::__1::allocator<nit::CardDistribution> > const&, nit::CardSet const&, nit::PokerHandEvaluator const&) const", referenced from:
Player::calc_equity(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in player-3c5ae7.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [makefile_bot:10: cppbot] Error 1
I don't think I'm failing to include the right files, or using the functions incorrectly, because when I try to purposely include the wrong files or put in wrong function arguments, it will produce a different error saying that the function wasn't found. I've set up my include directories correctly in my Makefile. I've tried compiling with both clang++ and g++ and don't understand what the issue could be here.
Aucun commentaire:
Enregistrer un commentaire