Iphone makefile сбрасывает последнюю цитату при загрузке - PullRequest
0 голосов
/ 24 июля 2011

В настоящее время я пытаюсь создать приложение для iPhone, которое я разработал, используя набор инструментов для iPhone.Когда я закончил создавать make-файл, он выдавал мне эту ошибку, когда он пытался загрузить мои файлы .o вместе:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

После просмотра кода оболочки, которую он пытался выполнить, я определил, что он отбросилПоследняя цитата, поэтому я быстро исправил свой make-файл.При загрузке мне выдается следующая ошибка:

Неопределенные символы:

  "_main", referenced from:
      __start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** ["Autotune] Error 1

Если я правильно прочитал, он не сможет найти свою основную функцию, но она четко определена в main.mm.Я хотел бы сохранить свой проект закрытым исходным кодом, но я хочу показать некоторые, не жизненно важные части моего кода.Я не понимаю, почему он не компилируется;это работало нормально на Xcode.Мое изменение в Makefile как-то привело к тому, что он не загружал символ _main?Как я могу решить эту проблему?Я весьма озадачен.

Вот мой Makefile:

PROJECTNAME="MyAppName"
APPFOLDER=$(PROJECTNAME).app
INSTALLFOLDER=$(PROJECTNAME).app

CC=arm-apple-darwin9-gcc
LD=$(CC)
LDFLAGS = -arch arm -lobjc 
LDFLAGS += -framework CoreFoundation 
LDFLAGS += -framework Foundation 
LDFLAGS += -framework UIKit 
LDFLAGS += -framework QuartzCore
LDFLAGS += -framework CoreGraphics 
LDFLAGS += -framework CoreAudio 
LDFLAGS += -framework AudioToolbox
LDFLAGS += -framework AVFoundation
LDFLAGS += -L"/usr/lib"
LDFLAGS += -F"/System/Library/Frameworks"
LDFLAGS += -F"/System/Library/PrivateFrameworks"
LDFLAGS += -bind_at_load
LDFLAGS += -multiply_defined suppress

CFLAGS = -I"/var/include" 
CFLAGS += -I"/usr/include"
CFLAGS += -I"/var/include/c++/4.0.0"
CFLAGS += -I"/var/include/c++/4.0.0/arm-apple-darwin9"
CFLAGS += -I"./Classes"
CFLAGS += -F"/System/Library/Frameworks" 
CFLAGS += -F"/System/Library/PrivateFrameworks" 
CFLAGS += -DDEBUG -Wall 
CFLAGS += -DMAC_OS_X_VERSION_MAX_ALLOWED=1050

BUILDDIR=./build/2.0
SRCDIR=./Classes
RESDIR=./Resources
OBJS=$(patsubst %.m,%.o,$(wildcard $(SRCDIR)/*.m))
OBJS+=$(patsubst %.mm,%.o,$(wildcard $(SRCDIR)/*.mm))
OBJS+=$(patsubst %.c,%.o,$(wildcard $(SRCDIR)/*.c))
OBJS+=$(patsubst %.cpp,%.o,$(wildcard $(SRCDIR)/*.cpp))
RESOURCES=$(wildcard $(RESDIR)/*)

all:    dist

CFLAGS += -include Prefix.h


$(PROJECTNAME): $(OBJS)
    $(LD) $(LDFLAGS) -o $@ $^

%.o:    %.m
    $(CC) -c $(CFLAGS) $< -o $@

%.o:    %.mm
    $(CC) -c $(CFLAGS) $< -o $@

%.o:    %.c
    $(CC) -c $(CFLAGS) $< -o $@

%.o:    %.cpp
    $(CC) -c $(CFLAGS) $< -o $@

dist:   $(PROJECTNAME)
    /bin/rm -rf $(BUILDDIR)
    /bin/mkdir -p $(BUILDDIR)/$(APPFOLDER)
    /bin/cp $(RESDIR)/* $(BUILDDIR)/$(APPFOLDER)
    /bin/cp Info.plist $(BUILDDIR)/$(APPFOLDER)/Info.plist
    @echo "APPL????" > $(BUILDDIR)/$(APPFOLDER)/PkgInfo
    /usr/bin/ldid -S $(PROJECTNAME)
    /bin/cp $(PROJECTNAME) $(BUILDDIR)/$(APPFOLDER)

install: dist
    /bin/cp -r $(BUILDDIR)/$(APPFOLDER) /Applications/$(INSTALLFOLDER)
    @echo "Application $(INSTALLFOLDER) installed"
    killall SpringBoard

uninstall:
    /bin/rm -fr /Applications/$(INSTALLFOLDER)
    killall SpringBoard

reinstall: dist
    /bin/rm -fr /Applications/$(INSTALLFOLDER)
    /bin/cp -r $(BUILDDIR)/$(APPFOLDER) /Applications/$(INSTALLFOLDER)
    @echo "Application $(INSTALLFOLDER) installed"

clean:
    @rm -f $(SRCDIR)/*.o
    @rm -rf $(BUILDDIR)
    @rm -f $(PROJECTNAME)

Важно отметить, что Prefix.h раньше был скомпилированным заголовком, но я просто изменил его на файл заголовка исказал make включить его во все мои исходные файлы.

Быстрое решение, которое я сделал для решения проблемы, не включившей окончательную цитату, было:

изменение:

$(PROJECTNAME): $(OBJS)
    $(LD) $(LDFLAGS) -o $@ $^

to:

$(PROJECTNAME): $(OBJS)
    $(LD) $(LDFLAGS) -o $@ $^"

Повторю мой вопрос после этого длинного поста.Мое изменение в Makefile как-то привело к тому, что он не загружал символ _main?

1 Ответ

0 голосов
/ 27 июля 2011

Я понял, что в моем действительном имени приложения, указанном PROJECTNAME, есть пробел. Я убрал пробел в своем быстром исправлении и изменил LD с apple-arm-darwin9-gcc на apple-arm-darwin9-g ++. после этого это сработало.

...