无法创建第一个库。 `undefined引用`main`

时间:2014-10-28 02:46:28

标签: c++ makefile .a

我正在尝试创建我的第一个基于linux的静态库。我在这里遵循这个网站的指示。

这是代码

#ifndef _ADDNUMBERS_H
#define _ADDNUMBERS_H

class AddNumbers
{
        private:
        int _a;
        int _b;

        public:
        AddNumbers ();
        ~AddNumbers ();

        void setA (int a);
        void setB (int b);

        int getA () const;
        int getB () const;

        int getSum () const;

}; // AddNumbers

#endif // _ADDNUMBERS_H

~/workspace/C++/AddNumbers/src/AddNumbers.cpp

#include "AddNumbers.h"

AddNumbers::AddNumbers ()
: _a(0), _b(0)
{
}

AddNumbers::~AddNumbers ()
{
}

void AddNumbers::setA (int a)
{
        _a = a;
}

void AddNumbers::setB (int b)
{
        _b = b;
}

int AddNumbers::getA () const
{
        return _a;
}

int AddNumbers::getB () const
{
        return _b;
}

int AddNumbers::getSum () const
{
        return _a + _b;
}

这是我正在使用的makefile。标头和cpp文件彼此相邻

CC=g++

ifeq ($(DEBUG),yes)
    CXXFLAGS=-Wall -g
    LDFLAGS=-Wall -g
else
    CXXFLAGS=-Wall
    LDFLAGS=-Wall
endif

AR=ar
ARFLAGS=rcs

INC=AddNumbers.h
SRC=AddNumbers.cpp
OBJ=AddNumbers.o
OUT=libAddNumbers.a

INCLUDES= -I #./$(INCPATH)

default: $(OUT)

$(OUT): $(OBJ)       
    $(AR) $(ARFLAGS) $@ $(OBJ)    # The @ means use the target name

%.o: %.cpp $(INC)
    $(CC) $(CXXFLAGS) $(INCLUDES) -c $< -o $@

.PHONY: clean cleanall

clean:
    rm -f *.o

cleanall: clean
    rm -f $(OUT)

这是我的输出

admin@localhost lib$ make
g++ -Wall -I  -c AddNumbers.cpp -o AddNumbers.o
/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [AddNumbers.o] Error 1
admin@localhost lib$ 

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

我相信您的无争议-I正在吞噬您的-c参数,因此gcc不会看到它并使用compile-only模式。

给你的-I参数赋值或者去掉它,看看是否有效。