[解決済み】アーキテクチャx86_64の未定義シンボル。コンパイル時の問題
2021-12-28 11:05:15
質問
コサイン係数とジャカール係数を使用してドキュメントを比較するSimilarityクラスの作成に問題があります。プロジェクトを正しくリンクすることができないので、実際のコードを書くことができません。
以下はMain.cppです。
#include "Main.h"
using namespace std;
static const string TAG = "Main: ";
int main(int argc, char *argv[])
{
string inStreamName;
string logStreamName;
string outStreamName;
ofstream outStream;
string timeCallOutput;
Scanner inStream;
Similarity similarity;
///////////////////////////////////////////////////////////////
// Boilerplate for naming files and opening files
Utils::CheckArgs(3, argc, argv, "infilename outfilename logfilename");
outStreamName = static_cast<string>(argv[2]);
logStreamName = static_cast<string>(argv[3]);
Utils::FileOpen(outStream, outStreamName);
Utils::LogFileOpen(logStreamName);
timeCallOutput = Utils::timecall("beginning");
Utils::logStream << timeCallOutput << endl;
Utils::logStream << TAG << "Beginning execution" << endl;
Utils::logStream << TAG << "outfile '" << outStreamName << "'" << endl;
Utils::logStream << TAG << "logfile '" << logStreamName << "'" << endl;
Utils::logStream.flush();
///////////////////////////////////////////////////////////////
// What follows here is the real work of this code.
// read the entire input file and echo it back
// compute the two similarity coefficients
inStreamName = static_cast<string>(argv[1]);
inStream.openFile(inStreamName);
Utils::logStream << TAG << "infile '" << inStreamName << "'" << endl;
Utils::logStream.flush();
similarity.readData(inStream);
outStream << TAG << "Data Begin\n" << similarity.toString() << endl;
outStream << TAG << "Data End\n" << endl;
outStream.flush();
inStream.close();
outStream << TAG << "Begin similarity computation" << endl;
outStream << TAG << "Maximum Jaccard similarity:\n" <<
similarity.maxJaccard() << endl;
outStream << TAG << "Maximum cosine similarity:\n" <<
similarity.maxCosine() << endl;
outStream << TAG << "End similarity computation" << endl;
outStream.flush();
///////////////////////////////////////////////////////////////
// Boilerplate for terminating gracefully
Utils::logStream << TAG << "Ending execution" << endl;
timeCallOutput = Utils::timecall("ending");
Utils::logStream << timeCallOutput << endl;
Utils::logStream.flush();
outStream.flush();
Utils::FileClose(outStream);
Utils::FileClose(Utils::logStream);
return 0;
}
Main.h
#ifndef MAIN_H
#define MAIN_H
#include "../../Utilities/Utils.h"
#include "../../Utilities/Scanner.h"
#include "Similarity.h"
class Main
{
public:
int main();
virtual ~Main();
private:
};
#endif // MAIN_H
私の類似性.cpp
#include "Similarity.h"
using namespace std;
void readData(Scanner& inStream){
}
string maxCosine(){
return "cosine";
}
string maxJaccard(){
return "jaccard";
}
string toString(){
return "toString";
}
そして最後に私のSimilarity.hです。
#ifndef SIMILARITY_H
#define SIMILARITY_H
#include "../../Utilities/Scanner.h"
class Similarity
{
public:
Similarity();
virtual ~Similarity();
void readData(Scanner& inStream);
string maxCosine();
string maxJaccard();
string toString();
private:
};
#endif
彼が提供したmakefileと、彼のスクリプトを動作させるために私が使用しなければならないものを使って採点すると、このエラーが発生します。
g++ -O3 -Wall -o Similarity.o -c Similarity.cpp
g++ -O3 -Wall -o Aprog Main.o Similarity.o Scanner.o ScanLine.o Utils.o
Undefined symbols for architecture x86_64:
"Similarity::maxJaccard()", referenced from:
_main in Main.o
"Similarity::readData(Scanner&)", referenced from:
_main in Main.o
"Similarity::toString()", referenced from:
_main in Main.o
"Similarity::maxCosine()", referenced from:
_main in Main.o
"Similarity::Similarity()", referenced from:
_main in Main.o
"Similarity::~Similarity()", referenced from:
_main in Main.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [Aprog] Error 1
解決方法は?
ログから、リンカーが不足しているシンボルを定義していないことを伝えていることがわかります。
Similarity::Similarity()
または
Similarity::~Similarity()
が抜けているだけで、その他の定義は間違っています。
void Similarity::readData(Scanner& inStream){
}
ではなく
void readData(Scanner& inStream){
}
などなど。
2つ目はreadDataという関数で、1つ目だけSimilarityクラスのreadDataメソッドです。
このことを明確にするために、Similarity.hの中で
void readData(Scanner& inStream);
が、Similarity.cppでは
void Similarity::readData(Scanner& inStream){
}
関連
-
DSDSアプリケーションシナリオ(Qualcomm 5G)
-
WSL2の他ホストへのVSCodeリモート接続問題
-
[解決済み】「collect2: error: ld returned 1 exit status」とはどういう意味ですか?
-
[解決済み】リソースの読み込みに失敗しました:サーバーは404(Not Found)のステータスで応答しました。)
-
NoVNCがVNCのリモート接続をWebベースで実現する方法
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] JavaScriptのNullとundefinedのチェックと==と===の違いについて
-
[解決済み] JavaScriptで未定義またはNULL変数をチェックする方法は?
-
[解決済み] シンボルをES6に導入する動機は何ですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SecureCRTのダウンロードとインストール手順の詳細
-
Burpsuiteの使い方とスタートアップ 詳細チュートリアル
-
Burp Suite Proのインストールと設定のチュートリアルの詳細
-
Win10でVScodeのリモート開発 ssh-remote(パスワード不要のログイン)を設定する
-
WSL2の他ホストへのVSCodeリモート接続問題
-
12 バックエンド管理システム開発のためのフロントエンドフレームワーク(要約)
-
5G帯の精緻化
-
[解決済み】アーキテクチャx86_64の未定義シンボル。コンパイル時の問題
-
NoVNCがVNCのリモート接続をWebベースで実現する方法
-
自律走行技術のV2X技術の紹介