Tôi muốn xây dựng ứng dụng của mình dưới Linux nhưng tôi không thể lấy makefile của mình để làm cho nó.
sự cố là các thư viện tĩnh tôi muốn liên kết. Tôi nhận được rất nhiều "tài liệu tham khảo không xác định để" thông báo lỗi như:Tham chiếu không xác định trong Linux makefile
undefined reference to `std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()'
hoặc
undefined reference to `cgicc::Cgicc::Cgicc(cgicc::CgiInput*)'
Đây là makefile của tôi:
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 [email protected] $(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 $<
Vấn đề là tôi không có ý tưởng về makefiles. Tôi chỉ sao chép một cái hiện có và cố điều chỉnh nó. Dường như không làm việc, và tôi không thể tìm thấy một makefile ví dụ bao gồm các thư viện tĩnh.
Makefile là tất cả tốt và tốt. Lỗi duy nhất bạn đang thực hiện là bạn sử dụng trình biên dịch C để biên dịch và liên kết C++. Trình biên dịch C++ được gọi là 'g ++' (chúng thực sự giống nhau trừ một vài mặc định, đó là lý do tại sao nó * gần như * hoạt động). –
Không liên quan đến vấn đề của bạn, nhưng bạn không cần quy tắc '% .o:% .cpp', vì thực hiện một quy tắc. Nó gần như giống nhau, nhưng nó cũng bao gồm' $ (CPPFLAGS) '(cờ tiền xử lý C)). Vì vậy, trừ khi bạn đang cố tình loại trừ những người đó, bạn sẽ nhận được một makefile "thành ngữ" hơn nếu bạn chỉ sử dụng quy tắc ngầm định. https://www.gnu.org/software/make/manual/make.html là một bài đọc vui nhộn. Vài giờ nó cần để slog thông qua các bit quan trọng sẽ được hoàn trả thông qua ít thời gian nhìn chằm chằm vào makefiles trong sự hoài nghi bên trong, oh, khoảng 4 giờ :-) –