2012-06-27 48 views
2

我试图编译.cpp文件作为使用makefile的objective-C++,因为我的cpp文件很少有客户端代码。我添加了-x objective-C++作为编译器选项,并开始在程序错误中出现杂散/ 327(以及/之后的大量类似的错误,其中包含大量类似的错误)。错误大约是200.但是,当我将文件的编码从unicode-8更改为16时,错误将减少为23.目前,.cpp文件中没有Objective-C++代码,但计划在将来添加。 当我从编译器选项中删除-x objective-C++时,一切都很好。并生成.out。我会是有益的,如果有人告诉我这是为什么发生的,甚至对于同一 在此先感谢比如我的makefile使用makefile将C++文件编译为objective-C++

解决方案

MACHINE= $(shell uname -s) 


CFLAGS?=-w -framework CoreServices -framework ApplicationServices -framework CoreFoundation -framework CoreWLAN -framework Cocoa -framework Foundation 

ifeq ($(MACHINE),Darwin) 
    CCLINK?= -lpthread 
else 
CCLINK?= -lpthread -lrt 
endif 

DEBUG?= -g -rdynamic -ggdb 
CCOPT= $(CFLAGS) $(ARCH) $(PROF) 
CC =g++ -x objective-c++ 
AR = ar rcs 
#lib name 
SLIB_NAME=myapplib 
EXENAME = myapp.out 
OBJDIR = build 

OBJLIB := $(addprefix $(OBJDIR)/... all .o files) 


SS_OBJ := $(addprefix $(OBJDIR)/,myapp.o ) 

vpath %.cpp path to my .cpp files 



INC = include files 


subsystem: 

    make all 

$(OBJLIB) : |$(OBJDIR) 
$(OBJDIR): 
    mkdir $(OBJDIR) 


$(OBJDIR)/%.o:%.cpp 
    $(CC) -c $(INC) $(CCOPT) $(DEBUG) $(CCLINK) $< -o [email protected] 


all: $(OBJLIB) $(CLI_OBJ) $(SS_OBJ) 
    $(AR) lib$(SLIB_NAME).a $(OBJLIB) 
    $(CC) $(INC) $(CCOPT) $(SS_OBJ) $(DEBUG) $(CCLINK) -l$(SLIB_NAME) -L ./ -o $(OBJDIR)/$(EXENAME) 


clean: 
    rm -rf $(OBJDIR)/* 
dep: 
    $(CC) -MM *.cpp 
+0

你使用什么编译器?你能举一个简单的例子,让任何人重现你的问题? – DevSolar

+1

@DevSolar我使用g ++我已经给出了一个示例makefile – Vikas

+4

“最小”仍然会包含一个简短的“hello world”类型的源文件,它显示了所描述的行为。它还将包含一个没有任何行的Makefile,而不直接*导致该问题。我要求这样做是因为它会a)给你一个机会来进一步缩小你的问题,b)告诉我们你已经努力这么做了,c)让我们更容易实际地重现错误,并检查如果我们的建议*在发布之前工作*。 – DevSolar

回答

0

你有一个流浪×(乘号)的外一个引用的字符串。所有的C/C++都必须是ASCII,除了字符串中的内容。

注意:ASCII转换为UTF-8是ASCII。如果utf-16没有引用的字符串必须是ASCII等效的,假设编译器支持utf-16。另外,文件格式可能产生不同的代码,不同的字符串产生。