首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用iostream、string和ifstream库制作文件

如何使用iostream、string和ifstream库制作文件
EN

Stack Overflow用户
提问于 2011-08-16 16:05:20
回答 4查看 10K关注 0票数 1

我正在尝试为一个使用lib字符串iostream和iostream的应用程序构建一个makefile。

代码语言:javascript
运行
复制
       CPP      = gcc
       LIB_DIR      = ./incl
       PROGRAMS = test
       PROGS_O      = action_rec.o
       CPPFLAGS = -I$(LIB_DIR) -pg -g
       VPATH        = ./src/
       OBJFILES = $(VPATH)$(patsubst %.cpp,%.o,$(wildcard *.cpp))
       LIBS     = -02 -liostream -lfstream -lstdlib -lstring

当我尝试使用makefile时,我得到的结果是所有需要lib字符串fstream和iostream的东西都没有声明,而需要lib stdlib的所有东西都能正常工作。有人能告诉我为什么吗?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-16 16:21:59

试着拿出所有的-lstring -stdlib -liostream -lfstream,看看它是否能修复它。

并使用g++进行编译,以便找到链接C++代码所需的其他内容。

票数 5
EN

Stack Overflow用户

发布于 2011-08-16 16:32:47

这里有两个独立的问题。

C++方面:不要使用gcc二进制文件编译C++代码,而是使用g++。这将自动引入所有必需的标准包含路径和库。

Makefile方面:您的Makefile有许多问题:

  1. 不要将CPP设置为编译器;此变量定义要使用的预处理器。使用CXX来定义编译器-它很可能恰好被定义为g++
  2. 不要创建名为test的程序。这恰好与标准的Unix程序(/usr/bin/test)发生冲突,如果你不注意,你可能会通过LIBS调用错误的program.
  3. Don't传递-02作为链接器标志。这个开关是a)写错了(它应该是-O2,字母O不是0),b)它是一个编译器标志,所以它应该是Makefile的一部分,因为你根本不需要Makefile。make程序附带了默认的Makefiles,因此您通常只需创建一个main.cpp文件,然后运行

设为main

这将自动编译main.cpp并将其链接到main可执行文件中。在您的例子中,如下所示

CXXFLAGS="-I./incl -pg -g -O2“make main

可能就足够了。

票数 4
EN

Stack Overflow用户

发布于 2011-08-16 16:27:18

明显的问题是,您使用的是gcc而不是g++gcc不链接到C++标准库。您可以手动添加它,但最简单的方法是将g++用于所有内容(除非您有实际的C代码;g++会将以.c结尾的文件编译为C++)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7075214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档