私はmakefileの問題を解決しようとしています。makefile:アーキテクチャのシンボルが見つかりません
私はmain.cppを持っていて、次にaddOn.cppとaddOn.hppを持っています。 これをコンパイルするために単純なmakefileを実行しようとしています。
私が持っている:
main: Main.o Log.o
g++ -o main Main.o Log.o
Main.o: main.cpp Log.hpp
g++ -c main.cpp
Log.o: Log.cpp Log.hpp
g++ -c Log.cpp
しかし、得続ける:ここ
$ make
g++ -c main.cpp
g++ -c Log.cpp
g++ -o main Main.o Log.o
Undefined symbols for architecture x86_64:
"Log::~Log()", referenced from:
_main in Main.o
"Log::overallVerboseLvl", referenced from:
Log::setLevel(int) in Log.o
Log::Log() in Log.o
Log::Log() in Log.o
Log::operator<<(char const*)in Log.o
"Log::fileName", referenced from:
Log::setFile(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in Log.o
Log::Log(int)in Log.o
Log::Log(int)in Log.o
Log::Log() in Log.o
Log::Log() in Log.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [main] Error 1
は、ファイルが
main.cppに
#include <iostream>
#include <string.h>
#include "Log.hpp"
int main(int argc, char *argv[]) {
Log::setFile("output.log");
Log(Log::LEVEL_INF) << "out and up...";
Log::setLevel(Log::LEVEL_INF);
Log(Log::LEVEL_INF) << "another line";
Log(Log::LEVEL_ERR) << "now a number: " << 13;
Log(Log::LEVEL_DBG) << "I shall not pass";
return 0;
}
Log.hpp
ですLog.cpp
#include <iostream>
#include <string.h>
#include "Log.hpp"
const int Log::LEVEL_INF = 0;
const int Log::LEVEL_ERR = 1;
const int Log::LEVEL_DBG = 2;
void Log::setLevel(int level){
Log::overallVerboseLvl = level;
}
void Log::setFile(std::string fileName){
Log::fileName = fileName;
}
Log::Log(){
Log::fileName = "";
Log::overallVerboseLvl = Log::LEVEL_DBG;
}
Log::Log(int verboseLvl){
Log::fileName = "";
Log::messageVerboseLvl = verboseLvl;
}
std::ostream& Log::operator<<(char const* text){
if (Log::overallVerboseLvl >= Log::messageVerboseLvl) {
std::cout << text;
}
return std::cout;
}
私が間違って何をしているのですか?
ソースファイルを表示できますか? – templatetypedef
エラー出力に「Log.o」というファイルがあります。これはあなたのメイクファイルにもありますか? – thb
Log.cppというファイルもありますか?同じディレクトリに2つのメイクファイルがありますか? – gbulmer