2016-10-29 6 views
0

Я пытаюсь следовать этому руководству здесь для создания SDL2 для прошивки:Отладка ошибок линкера с Xcode - SDL статической библиотека

http://lazyfoo.net/tutorials/SDL/52_hello_mobile/ios_mac/index.php

Я могу построить статическую библиотеку libSDL2.a, однако я получение ошибки компоновщика, когда я пытаюсь создать его приложение hello world, которое его использует.

Ld /Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Products/Debug-iphonesimulator/___PROJECTNAME___.app/___PROJECTNAME___ normal x86_64 
    cd "/Users/testuser/Documents/iosBuild/SDL iOS Application" 
    export IPHONEOS_DEPLOYMENT_TARGET=10.0 
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator10.0.sdk -L/Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Products/Debug-iphonesimulator -F/Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Products/Debug-iphonesimulator -filelist /Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Intermediates/___PROJECTNAME___.build/Debug-iphonesimulator/___PROJECTNAME___.build/Objects-normal/x86_64/___PROJECTNAME___.LinkFileList -mios-simulator-version-min=10.0 -Xlinker -object_path_lto -Xlinker /Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Intermediates/___PROJECTNAME___.build/Debug-iphonesimulator/___PROJECTNAME___.build/Objects-normal/x86_64/___PROJECTNAME____lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -lSDL2 -framework GameController -framework Foundation -framework UIKit -framework OpenGLES -framework QuartzCore -framework CoreAudio -framework AudioToolbox -framework CoreGraphics -framework CoreMotion -Xlinker -dependency_info -Xlinker /Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Intermediates/___PROJECTNAME___.build/Debug-iphonesimulator/___PROJECTNAME___.build/Objects-normal/x86_64/___PROJECTNAME____dependency_info.dat -o /Users/testuser/Library/Developer/Xcode/DerivedData/___PROJECTNAME___-egvszvnfjpicgqdtaazpczjuebut/Build/Products/Debug-iphonesimulator/___PROJECTNAME___.app/___PROJECTNAME___ 

ld: library not found for -lSDL2 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

За его наставления, я скопировал шаблон проекта и добавил LIB libSDL2.a, что я построил под Строительство фаз -> ссылка бинарный с меню библиотеки:

enter image description here

Любые предложения по как я могу отладить эту проблему?

Edit: Моя цель построения конфигурации в проекте, который использует библиотеку:

enter image description here

enter image description here

+1

Вы уверены, что архитектура верная? Если вы построите его отдельно для устройства, вы не сможете использовать его в симуляторе ... Сначала проверьте, что ... – Macmade

+0

Я считаю, что я построил его для правильной цели, но в этом мой вопрос, я не уверен, как быть уверенным. Когда я запускаю этот инструмент lipo, это мой вывод против библиотеки, которую я создал для запуска в симуляторе iphone 5: libo -info libSDL2.a входной файл libSDL2.a не является жирным файлом. Нежирный файл: libSDL2.a - это архитектура : i386 – Hoofamon

ответ

1

попытайтесь создать свою библиотеку с помощью этого скрипта. конечный продукт будет размещен в вашем домашнем каталоге ~/SDL.

#!/bin/sh 

PREFIX=$HOME/SDL 
SYMROOT="SYMROOT=$PREFIX/release" 

SDK_DEVICE="-sdk iphoneos" 
SDK_SIMULATOR="-sdk iphonesimulator" 
CONF_DEBUG="-configuration Debug" 
CONF_RELEASE="-configuration Release" 

mkdir -p $PREFIX 
cd $PREFIX 

wget https://www.libsdl.org/release/SDL2-2.0.4.zip 
unzip SDL2-2.0.4.zip 
rm -f SDL2-2.0.4.zip 

# ------------------------------------------------------------------------ 
# SDL 
# ------------------------------------------------------------------------ 
cd $PREFIX/SDL2-2.0.4/Xcode-iOS/SDL 
SCHEME="libSDL" 
PROJ="-project SDL.xcodeproj" 

#xcodebuild OTHER_CFLAGS="-fembed-bitcode" OTHER_LDFLAGS="-lobjc" ONLY_ACTIVE_ARCH=NO -arch i386 -arch x86_64 $PROJ $SDK_SIMULATOR  $CONF_DEBUG -scheme='$SCHEME' build  $SYMROOT 
xcodebuild OTHER_CFLAGS="-fembed-bitcode" ONLY_ACTIVE_ARCH=NO -arch i386 -arch x86_64 $PROJ $SDK_SIMULATOR $CONF_RELEASE -scheme='$SCHEME' build  $SYMROOT 
#xcodebuild OTHER_CFLAGS="-fembed-bitcode" OTHER_LDFLAGS="-lobjc" ONLY_ACTIVE_ARCH=NO -arch arm64 -arch armv7 $PROJ $SDK_DEVICE  $CONF_DEBUG -scheme='$SCHEME' build  $SYMROOT 
xcodebuild OTHER_CFLAGS="-fembed-bitcode" ONLY_ACTIVE_ARCH=NO -arch arm64 -arch armv7 $PROJ $SDK_DEVICE  $CONF_RELEASE -scheme='$SCHEME' build  $SYMROOT 

lipo $PREFIX/release/Release-iphonesimulator/libSDL2.a $PREFIX/release/Release-iphoneos/libSDL2.a -create -output $PREFIX/libSDL2.a 
+0

Большое вам спасибо, я не знал, что этот cli существует для xcode. Я смог использовать ваш скрипт для сборки библиотеки, а затем изменил его, чтобы построить проект, который использует библиотеку. Это будет отличный способ упорядочить мой процесс сборки iOS, действительно оцените подсказку – Hoofamon

+0

, я мог бы с радостью помочь. решение становится еще более мощным при создании всех sdl libs - sdl2_ttf, sdl2_image, sdl2_mixer и sdl2_net. это может сэкономить некоторое время. – ha100

2

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

Кроме того, имейте в виду, что на самом деле не поддерживается размещение архитектур для разных платформ (таких как iOS и tvOS, или даже iOS и iOS Simulator - симуляторы - отдельные платформы) в одном бинарнике. Для каждой платформы, на которую вы нацеливаетесь, вам понадобится отдельная библиотека или фреймворк, хотя каждый может, конечно, содержать срезы для всех поддерживаемых архитектуры этой платформы.

+0

Насколько я могу судить, я построил его для правильной цели, но в этом мой вопрос, я не уверен, как быть уверенным. Когда я запускаю этот инструмент lipo, это мой вывод против библиотеки, которую я создал для запуска в симуляторе iphone 5: lipo -info libSDL2.a входной файл libSDL2.a не является жирным файлом Нежирный файл: libSDL2.a is architecture: i386 – Hoofamon

+0

В вашей команде выше, у вас есть «... clang -arch x86_64», поэтому вы пытаетесь связать статический архив i386 с двоичным кодом x86_64. –

+0

Как я могу его изменить? Я добавил скриншот конфигурации сборки для этого проекта, я вижу 2 поля: архитектуры и допустимые архитектуры, но ни один список x86_64 – Hoofamon