同様の問題を調べてみましたが、問題を解決する問題を簡単に見つけることができませんでした。
私はC++でプロジェクトを作成し、UNIXでコンパイル、リンク、および実行しています。私の特定の問題は、別のファイルで宣言したメソッドへの未定義の参照です。
SharedCache.cppファイルには、次のメソッドがあります。
int SharedCache::replaceLine(ullong address){
int evictPID = -1;
int cacheSet = calcCacheSet( address );
//random uniformly-distributed value for cache line
float numLines = static_cast<float>(CACHE_LINES_PER_SET);
uint cacheLine = static_cast<uint>(uniformDistr( numLines ));
if(cache[cacheSet][cacheLine] != NULL){
evictPID = cache[cacheSet][cacheLine]->PID;
}
uint PID= calcPID(address);
uint tag= calcTag(address);
cache[cacheSet][cacheLine]->setLine(PID, tag); //mutex method
return PID;
}
この行uint cacheLine = static_cast<uint>( uniformDistr( numLines ));
は、別のファイルから使用したい関数を呼び出します。リンカエラーは、このメソッドへの未定義の参照です。
uniformDistr(float); ヘッダーdistributions.hで宣言され、distributions.cppで定義されています。プロジェクトオプションで、リンカーフラグ-distributionsを設定し、distributions.cppをコンパイルして、リンク先のdistributions.oファイルが存在することを確認しました。
ここからは、問題が解決していないので、どこに行けばいいのかわかりません。