2012-06-27 29 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。另外,文件格式可能產生不同的代碼,不同的字符串產生。