Я обнаружил ошибку в моем Mac x64, когда заметил, что код успешно запущен на компьютере с Windows x86 (загрузка кода библиотеки с Github). Но я думаю, что это не были проблемы с кодом C ++, потому что это, кажется, хорошо определено. Я провел поиск по большинству решений, но пока я не смог решить мои проблемы.
Ошибка :
Undefined symbols for architecture i386:
"libedm::CRandSequence::Poll()", referenced from:
libedm::CDataset::SubSet(int, libedm::CDataset&) const in DataSet.o
DataSet.cpp
#include "RandSequence.h"using namespace libedm;
...
bool CDataset::SubSet(int DataNum, CDataset &TrainSet) const
{
//sub set of a data set
int FinalSize=DataNum;
if(DataNum>CaseInfo.Height)
FinalSize=CaseInfo.Height;
TrainSet.Matrix.clear();
CRandSequence RandSequence(FinalSize);
for(int i=0;i<FinalSize;i++)
{
int TrainNum=RandSequence.Poll();
TrainSet.Matrix.push_back(Matrix[TrainNum]);
}
TrainSet.CaseInfo=CaseInfo;
TrainSet.CaseInfo.Height=FinalSize;
TrainSet.CreatingTime=0;
return true;
}
RandSequence.cpp
int CRandSequence::Poll()
{
int Left=(int)OldIds.size();
if(Left==0)
return -1;
//select
int Selected=IntRand(Left);
int Ret=OldIds[Selected];
OldIds.erase(OldIds.begin()+Selected);
return Ret;
}
RandSequence.h
namespace libedm
{
class CRandSequence
{
public:
int Poll();
CRandSequence(int UMax);
void Reset();
private:
vector<int> OldIds;
int Max;
};
}
Я также попытался сделать мои настройки в my project->Build Setting
как предложено некоторыми другими экспертами здесь.
1) Apple LLVM Language C++ > C++ Standard Library = libstdc++ (GNU C++ standard library)
2) Architectures > Architectures = 32-bit Intel (i386)- $(ARCHS_STANDARD_32_BIT)
3) Development > OS X Development Target = OS X 10.11 (tried to reduce)
4) Search Paths > Header Search Paths = (All i had header was linked..)
Задача ещё не решена.
Других решений пока нет …