我正在尝试为一个使用lib字符串iostream和iostream的应用程序构建一个makefile。
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的所有东西都能正常工作。有人能告诉我为什么吗?谢谢
发布于 2011-08-16 16:21:59
试着拿出所有的-lstring -stdlib -liostream -lfstream,看看它是否能修复它。
并使用g++进行编译,以便找到链接C++代码所需的其他内容。
发布于 2011-08-16 16:32:47
这里有两个独立的问题。
C++方面:不要使用gcc二进制文件编译C++代码,而是使用g++。这将自动引入所有必需的标准包含路径和库。
Makefile方面:您的Makefile有许多问题:
CPP设置为编译器;此变量定义要使用的预处理器。使用CXX来定义编译器-它很可能恰好被定义为g++。test的程序。这恰好与标准的Unix程序(/usr/bin/test)发生冲突,如果你不注意,你可能会通过LIBS调用错误的program.-02作为链接器标志。这个开关是a)写错了(它应该是-O2,字母O不是0),b)它是一个编译器标志,所以它应该是Makefile的一部分,因为你根本不需要Makefile。make程序附带了默认的Makefiles,因此您通常只需创建一个main.cpp文件,然后运行设为main
这将自动编译main.cpp并将其链接到main可执行文件中。在您的例子中,如下所示
CXXFLAGS="-I./incl -pg -g -O2“make main
可能就足够了。
发布于 2011-08-16 16:27:18
明显的问题是,您使用的是gcc而不是g++。gcc不链接到C++标准库。您可以手动添加它,但最简单的方法是将g++用于所有内容(除非您有实际的C代码;g++会将以.c结尾的文件编译为C++)。
https://stackoverflow.com/questions/7075214
复制相似问题