Linux makefile中未定义的引用

时间:2011-09-16 07:17:14

标签: c++ linux makefile

我想在linux下构建我的应用程序,但我无法使用我的makefile来实现它 问题是我要链接的静态库。我得到了很多“未定义的引用”错误消息,如:

undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'

undefined reference to `cgicc::Cgicc::Cgicc(cgicc::CgiInput*)'

这是我的makefile:

CXX = gcc

INCL_CGICC = ../cgicc-3.2.9
INCL_OPENSSL = ../openssl-1.0.0e/include
INCL_LOG4CPLUS = ../log4cplus-1.0.4/include
INCL_BOOST = ../boost_1_46_1
INCLUDES = -I$(INCL_CGICC) -I$(INCL_OPENSSL) -I$(INCL_LOG4CPLUS) -I$(INCL_BOOST)

CXXFLAGS = -Wall -D_LINUX -DVERSNUM=2 -DVERSMAJOR=0 -DVERSMINOR=0 $(INCLUDES)

TARGET = myapp
OBJS = Main.o 

all: $(TARGET)
strip -s $<
mv -f $< release 

$(TARGET): $(OBJS)
$(CXX) -static -o $@ $(OBJS) \
            ../cgicc-3.2.9/cgicc/.libs/libcgicc.a \
            ../openssl-1.0.0e/libssl.a \
            ../openssl-1.0.0e/libcrypto.a \
            ../log4cplus-1.0.4/src/.libs/liblog4cplus.a \
            -ldl -lpthread

%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $<

问题是我不知道makefile。我只是复制了一个现有的并尝试调整它。似乎没有用,我找不到包含静态库的示例makefile。

2 个答案:

答案 0 :(得分:15)

CXX = gcc

您要与gcc关联,而不是g++,因此默认情况下不会链接-lstdc++。 请注意,使用gcc编译C ++源代码很好,因为在这种情况下会隐式调用g++

答案 1 :(得分:3)

如果你对编写Makefile没有任何线索,也许你应该看看一些Makefile生成器,例如: autotools,cmake等。在我看来,这些更容易使用,而且,一旦掌握了它们的使用,就会更加强大。