[英]c++ Makefile with external h and o files
I have project files and I need to use an external test file named TestSuite1.cpp
that includes an external header file SignalMasker.h
(Was given it and it's object file SignalMasker.o) and my main header file uthreads.h
. 我有项目文件,我需要使用一个名为TestSuite1.cpp
的外部测试文件,其中包括一个外部头文件SignalMasker.h
(已给定它的目标文件SignalMasker.o)和我的主头文件uthreads.h
。
I'm still getting undefined refrences such as: 我仍然收到未定义的参考,例如:
TestSuite1.cpp:63: error: undefined reference to 'SignalMasker::~SignalMasker()'
This means my Makefile isn't including the SignalMasker.o
file that resides in the same directory. 这意味着我的Makefile不包含驻留在同一目录中的SignalMasker.o
文件。
This is my Makefile: 这是我的Makefile:
CC = g++
FLAGS = -Wall -g
OBJECTS = uthreads.o Thread.o Scheduler.o SchedulerStarter.o TestSuite1.o
.PHONY : clean
all: test1
test1: $(OBJECTS)
g++ $(FLAGS) $(OBJECTS) SignalMasker.o -L . -o test1
TestSuite1.o : TestSuite1.cpp SignalMasker.h uthreads.h
$(CC) -c $(FLAGS) TestSuite1.cpp
uthreads.o : uthreads.cpp uthreads.h SchedulerStarter.h Scheduler.h Thread.h
$(CC) -c $(FLAGS) uthreads.cpp
Scheduler.o : Scheduler.cpp Scheduler.h Thread.h
$(CC) -c $(FLAGS) Scheduler.cpp
SchedulerStarter.o : SchedulerStarter.cpp SchedulerStarter.h Scheduler.h
$(CC) -c $(FLAGS) SchedulerStarter.cpp
Thread.o : Thread.cpp Thread.h uthreads.h translateAdd.h
$(CC) -c $(FLAGS) Thread.cpp
clean:
rm -f $(OBJECTS) *~
And now I'm getting: 现在我得到:
~/Desktop/tests$ make
g++ -Wall -g uthreads.o Thread.o Scheduler.o SchedulerStarter.o TestSuite1.o SignalMasker.o -L . -o test1
/usr/bin/ld: error: SignalMasker.o: incompatible target
TestSuite1.cpp:36: error: undefined reference to 'SignalMasker::SignalMasker(int)'
TestSuite1.cpp:63: error: undefined reference to 'SignalMasker::~SignalMasker()'
TestSuite1.cpp:63: error: undefined reference to 'SignalMasker::~SignalMasker()'
TestSuite1.cpp:68: error: undefined reference to 'SignalMasker::SignalMasker(int)'
TestSuite1.cpp:111: error: undefined reference to 'SignalMasker::~SignalMasker()'
TestSuite1.cpp:111: error: undefined reference to 'SignalMasker::~SignalMasker()'
collect2: ld returned 1 exit status
EDIT: I'm now pondering with the idea that maybe incompatible target means they compiled it under 64bit. 编辑:我现在正在考虑可能不兼容的目标意味着他们在64位下编译它的想法。 My machine is 32bit 我的机器是32位的
you are missing rule to compile SignalMasker.cpp in your makefile. 您缺少在生成文件中编译SignalMasker.cpp的规则。 you have to write a rule, the same way you have written for SchedulerStarter.o, Thread.o 您必须编写规则,就像为SchedulerStarter.o,Thread.o编写规则一样
SignalMasker.o : SignalMasker.cpp SignalMasker.h $(CC) -c $(FLAGS) SignalMasker.cpp SignalMasker.o:SignalMasker.cpp SignalMasker.h $(CC)-c $(FLAGS)SignalMasker.cpp
This will ensure the SignalMasker.o is generated with the same compilation flags that you build other objects. 这将确保使用与构建其他对象相同的编译标志来生成SignalMasker.o。 It will eliminate incompatibility issues in case of 32-bit/ 64-bit variants. 如果出现32位/ 64位变体,它将消除不兼容的问题。
if you are copying this SignalMasker.o from elsewhere, check the compilation flags used for generating the object. 如果要从其他地方复制此SignalMasker.o,请检查用于生成对象的编译标志。 Use the same flags in your makefile. 在您的makefile中使用相同的标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.