gpt4 book ai didi

c++ - 在 makefile 中使用 -lstdc++

转载 作者:行者123 更新时间:2023-11-30 01:57:18 29 4
gpt4 key购买 nike

这是我的错误

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::的前两个 undefined reference 是伪造的,代码有效并且 Server.h 正确包含在 msgd.cc 中。

然而,当我简单地执行“make server”时它运行良好,而当我执行“make client”时它运行良好,但我希望能够只执行“make”并让它构建两者。

这是我的生成文件。根据https://stackoverflow.com/a/10907227/2080104我需要包含 -lstdcc++,但我似乎无法弄清楚如何在 makefile 中这样做。

# 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 $@ : /g'\'' > $@; \
[ -s $@ ] || rm -f $@'

include $(OBJS:.o=.d)

最佳答案

当您有一个名为 msgd.o 的目标文件时,您将一个变量命名为 msgd,然后您将它们混淆了。哦,你有一个目标 server,它实际上并不构建 server,它构建 msgd

您有一个默认目标 (all),它构建的内容与您希望默认目标构建的内容不同。

当你不知道如何在命令行上做某事,或者你不知道 makefile 的哪一部分时,你想要 Make 做某事(即使用 -lstdcc++)对应于您在命令行上执行的操作。

我会建议对 makefile 进行具体更改,但您的意图如此不明确,恐怕弊大于利。

关于c++ - 在 makefile 中使用 -lstdc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864488/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com