вот моя ошибкаиспользование -lstdC++ в Makefile
make
cc msgd.o -o msgd
msgd.o: In function `main':
/home/cam/Desktop/lab1/msgd.cc:37: undefined reference to `Server::Server(int, bool)'
/home/cam/Desktop/lab1/msgd.cc:39: undefined reference to `Server::~Server()'
msgd.o: In function `__static_initialization_and_destruction_0':
/usr/include/c++/4.7/iostream:75: undefined reference to `std::ios_base::Init::Init()'
/usr/include/c++/4.7/iostream:75: undefined reference to `std::ios_base::Init::~Init()'
msgd.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status
make: *** [msgd] Error 1
Первые два неопределенные ссылки на сервер :: являются поддельными, код работает и server.h правильно включен в msgd.cc.
Однако, когда я просто делаю «сервер», он работает нормально, и когда я делаю «клиент», он работает нормально, но я хочу иметь возможность просто «сделать» и построить его как.
Вот мой makefile. Согласно https://stackoverflow.com/a/10907227/2080104 мне нужно включить -lstdcC++, но я не могу понять, как это сделать в make-файле.
# Makefile for socket examples
CXX= g++ $(CCFLAGS)
msgd= msgd.o Server.o Data.o User.o Message.o Str.o
msg= msg.o Client.o Str.o
OBJS = $(msgd) $(msg)
CCFLAGS= -std=c++11 -g
all: msgd Server Data User Message Str msg Client
server:$(msgd)
$(CXX) -o msgd $(msgd)
client:$(msg)
$(CXX) -o msg $(msg)
clean:
rm -f $(OBJS) $(OBJS:.o=.d)
realclean:
rm -f $(OBJS) $(OBJS:.o=.d) msgd msg
# These lines ensure that dependencies are handled automatically.
%.d: %.cc
$(SHELL) -ec '$(CC) -M $(CPPFLAGS) $< \
| sed '\''s/\($*\)\.o[ :]*/\1.o [email protected] : /g'\'' > [email protected]; \
[ -s [email protected] ] || rm -f [email protected]'
include $(OBJS:.o=.d)
Ват ошибка, которую вы получаете? – shofee
Помимо хорошего совета ниже, вы должны _never_ добавить '-lstdC++' в свою линию ссылок. Ответ SO, на который вы ссылаетесь, рекомендует просто ссылаться на C++ ('g ++'), а не на C ('gcc'). Если вы свяжетесь с 'g ++', то поймете, что вы пытаетесь связать код на C++ и автоматически добавляете все нужные вам библиотеки, в том числе '-lstdC++', в правильном порядке. Очень сложно получить это право самостоятельно, поэтому просто не делайте этого, если у вас нет чрезвычайно сложных требований к привязке, которые его задают. – MadScientist