我想在linux下构建我的应用程序,但是我无法获取makefile来创建它。
问题是我想链接的静态库。我收到很多“ undefined reference ”错误消息,例如:
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。
最佳答案
CXX = gcc
您正在使用gcc
而不是g++
进行链接,因此默认情况下未链接-lstdc++
。
注意,使用gcc
编译C++源代码可以很好地工作,因为在这种情况下隐式调用了g++
。