私は何か簡単なことをしようとしていますが、なぜエラーが出るのかわかりません。私はあなたが何が起こっているかを見ることができるようにインクルードするMakefileを持っています。しかし、私がプログラムを踏むと、私はlibc-start.c: No such file or directory
になる。これをMakefileで処理するか、これを避ける方法はありますか?見つからないファイルにアクセスするgdbデバッガ
のMakefile
# makefile to build a program
# program depends on components: name and main
myname: main.o name.o
g++ -g -ggdb main.o name.o -o myname
# name.cpp has it's own header file
name.o: name.cpp name.h
g++ -c -g -ggdb name.cpp
# main.cpp also uses the header file name.h
main.o: main.cpp name.h
g++ -c -g -ggdb main.cpp
clean:
/bin/rm -f myname *.o
main.cppに
#include <iostream>
#include <string>
using namespace std;
#include "name.h"
int main() {
name myName;
myName.SetLast(LAST);
myName.SetMiddle(MI);
myName.SetFirst(FIRST);
cout <<"My name is: ";
myName.PrintFirst();
myName.PrintMiddle();
myName.PrintLast();
return 0;
}
name.cpp
#include <iostream>
#include <string>
using namespace std;
#include "name.h"
void name::GetFirst(string str) {
str=first;
}
void name::SetFirst(string str) {
first=str;
}
void name::GetMiddle(string str) {
str=middle;
}
void name::SetMiddle(string str) {
middle=str;
}
void name::GetLast(string str) {
str=last;
}
void name::SetLast(string str) {
last=str;
}
void name::PrintLast() {
cout << last << "\n";
}
void name::PrintMiddle() {
cout << middle;
}
void name::PrintFirst() {
cout << first;
}
名.h
#define LAST "Tank-Engine"
#define MI "T. "
#define FIRST "Thomas "
class name {
private:
string first;
string middle;
string last;
public:
void SetFirst(string str);
void GetFirst(string str);
void SetMiddle(string str);
void GetMiddle(string str);
void SetLast(string str);
void GetLast(string str);
void PrintLast();
void PrintMiddle();
void PrintFirst();
};
GDBエラー
name::PrintLast (this=0x7fffffffe4a0) at name.cpp:31
31 cout << last << "\n";
(gdb) s
My name is: Thomas T. Tank-Engine
32 }
(gdb) s
main() at main.cpp:18
18 return 0;
(gdb) s
name::~name (this=0x7fffffffe4a0, __in_chrg=<optimized out>) at name.h:5
5 class name {
(gdb) s
main() at main.cpp:19
19 }
(gdb) s
__libc_start_main (main=0x400b86 <main()>, argc=1, argv=0x7fffffffe5b8, init=<optimized out>,
fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe5a8) at libc-start.c:323
323 libc-start.c: No such file or directory.
(gdb) s
__GI_exit (status=0) at exit.c:104
104 exit.c: No such file or directory.
(gdb) s
103 in exit.c
(gdb) s
104 in exit.c
(gdb) s
__run_exit_handlers (status=0, listp=0x7ffff78ae698 <__exit_funcs>,
[email protected]=true) at exit.c:35
35 in exit.c
(gdb)
'CFLAGS'と' CXXFLAGS'に2つのフラグを追加します: '-g3 -O0'。 '-g3'はシンボリック定義を含み、' -O0'は ''を助けるかもしれません。 [-gオプションでコンパイルしますが、「行番号情報を持たないmain関数を終了するまでステップを実行する」」(http://stackoverflow.com/q/20474668/608639)を参照してください。引用された質問は、GDBを更新すると言います。最近、 'apt-get update && apt-get dist-upgrade'を実行しましたか? –
jww
これらのフラグをMakefileに追加すべきですか?そして、はい、私はすべてを更新しました。 – developerME