Неопределенная ссылка в make-файле Linux - PullRequest
5 голосов
/ 16 сентября 2011

Я хочу создать свое приложение под Linux, но я не могу заставить свой make-файл сделать это.
проблемы - это статические библиотеки, с которыми я хочу связать.Я получаю множество «неопределенных ссылок на» сообщения об ошибках типа:

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

или

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

Вот мой make-файл:

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 $<

Проблема в том,что я понятия не имею о make-файлах.Я просто скопировал существующий и попытался настроить его.Кажется, не работает, и я не могу найти пример make-файла, который включает статические библиотеки.

Ответы [ 2 ]

15 голосов
/ 16 сентября 2011

CXX = gcc

Вы связываетесь с gcc, а не g++, поэтому -lstdc++ по умолчанию не связано.Обратите внимание, что использование gcc для компиляции исходников C ++ работает просто отлично, поскольку g++ в этом случае вызывается неявно.

3 голосов
/ 16 сентября 2011

Если вы не имеете ни малейшего представления о написании Makefile, возможно, вам стоит взглянуть на некоторые генераторы Makefile, например, autotools, cmake и т. д. По моему мнению, их гораздо проще использовать, и, как только вы освоите их использование, они станут намного мощнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...