【问题标题】:Failed to create first library. `undefined reference to `main`未能创建第一个库。 `未定义的对`main`的引用
【发布时间】:2014-10-28 02:46:27
【问题描述】:

我正在尝试创建我的第一个基于 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;
}

这是我正在使用的生成文件。头文件和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$ 

我该如何解决这个问题?

【问题讨论】:

  • 它是一个图书馆,它不应该有一个主要的
  • 为了将来参考,您对新技术的第一次尝试应该尽可能简单。静态库的第一次尝试是HelloWorld.a

标签: c++ makefile .a


【解决方案1】:

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

要么给你的 -I 参数一个值,要么去掉它,看看它是否有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多