Makefile-没有创建main.o,但是可以编译 [英] Makefile - main.o isn't created, but compiling is ok

查看:105
本文介绍了Makefile-没有创建main.o,但是可以编译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有C ++项目.这是Makefile:

I have C++ project. This is Makefile:

CXX=g++
LD=g++
CFLAGS=-Wall -pedantic -Wno-long-long -O0 -ggdb
LIBS=-lncurses -lmenu -lform
SOURCE=src/

all: compile doc

compile: glazafil

doc:
    doxygen .doxygen

glazafil: main.o xmlparser.o xmltree.o xmlnode.o xmlnodeattribute.o gui.o
    $(LD) -o main.o xmlparser.o xmltree.o xmlnode.o xmlnodeattribute.o gui.o $(LIBS)

main.o: $(SOURCE)main.cpp $(SOURCE)xmlparser.h $(SOURCE)xmltree.h $(SOURCE)gui.h
    $(CXX) $(CFLAGS) -c -o main.o $(SOURCE)main.cpp

xmlparser.o: $(SOURCE)xmlparser.cpp $(SOURCE)xmlnode.h
    $(CXX) $(CFLAGS) -c -o xmlparser.o $(SOURCE)xmlparser.cpp

xmltree.o: $(SOURCE)xmltree.cpp $(SOURCE)xmltree.h $(SOURCE)xmlnode.h
    $(CXX) $(CFLAGS) -c -o xmltree.o $(SOURCE)xmltree.cpp

xmlnode.o: $(SOURCE)xmlnode.cpp $(SOURCE)xmlnode.h $(SOURCE)xmlnodeattribute.h
    $(CXX) $(CFLAGS) -c -o xmlnode.o $(SOURCE)xmlnode.cpp

xmlnodeattribute.o: $(SOURCE)xmlnodeattribute.cpp $(SOURCE)xmlnodeattribute.h
    $(CXX) $(CFLAGS) -c -o xmlnodeattribute.o $(SOURCE)xmlnodeattribute.cpp

gui.o: $(SOURCE)gui.cpp $(SOURCE)gui.h $(SOURCE)xmltree.h
    $(CXX) $(CFLAGS) -c -o gui.o $(SOURCE)gui.cpp

clean:
    rm -f glazafil main.o xmlparser.o xmltree.o xmlnode.o xmlnodeattribute.o gui.o; rm -r -i doc

这是make编译输出:

This is make compile output:

g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o main.o src/main.cpp
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o xmlparser.o src/xmlparser.cpp
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o xmltree.o src/xmltree.cpp
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o xmlnode.o src/xmlnode.cpp
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o xmlnodeattribute.o src/xmlnodeattribute.cpp
g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o gui.o src/gui.cpp
g++ -o main.o xmlparser.o xmltree.o xmlnode.o xmlnodeattribute.o gui.o -lncurses -lmenu -lform
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 0 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 1 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 2 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 3 has invalid symbol index 2
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 4 has invalid symbol index 11
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 5 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 6 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 7 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 8 has invalid symbol index 12
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 9 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 10 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 11 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 12 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 13 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 14 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 15 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 16 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 17 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 18 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 19 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 20 has invalid symbol index 13
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_info): relocation 21 has invalid symbol index 22
/usr/bin/ld: /usr/lib/debug/usr/lib/i386-linux-gnu/crt1.o(.debug_line): relocation 0 has invalid symbol index 2
/usr/lib/gcc/i686-linux-gnu/4.7/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [glazafil] Error 1

不会创建main.o文件,但是在NetBeans中它可以工作.为什么我要运行此g ++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o main.o src/main.cpp它制作了main.o,但仍然无法正常工作.这是main.cpp:

The main.o file is not created, but in NetBeans it works. WHen I run this g++ -Wall -pedantic -Wno-long-long -O0 -ggdb -c -o main.o src/main.cpp It makes main.o, but it still doesn't work. This is main.cpp:

#include "xmlparser.h"
#include "xmltree.h"
#include "gui.h"
#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
    /*if( argc < 2 ) {
        return 0;
    }
    string in(argv[1]);
    fstream file;
    file.open(argv[1], ios_base::out | ios_base::in);
    if(!file.is_open()) {
        cout << "The input file doesn't exist" << endl;
        return 0;
    }
    file.close();
    string out = "";
    if(argc > 2) {
        string out(argv[2]);
    }*/
    XMLParser parser;
    XMLTree tree = parser.ParseFile("/home/figa/out.xml", "/home/figa/out.xml");
    //XMLTree tree = parser.ParseFile(in, out);
    GUI gui = GUI(tree);
    tree.delNode(tree.root);
    return 0;
}

哪里有问题?感谢您的帮助.

Where can be a problem? Thanks for help.

推荐答案

问题是 $(LD)-o main.o ,它用可执行文件覆盖了main.o并破坏了剩下的链接阶段.您将要用它代替 $(LD)-o glazafil main.o 等.

The problem is the $(LD) -o main.o, it's overwriting your main.o with your executable and ruining the rest of your link phase. You'll want to substitute that for $(LD) -o glazafil main.o etc.

这篇关于Makefile-没有创建main.o,但是可以编译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆