2016-10-29 2 views
0

내가 iOS 용 SDL2을 구축 여기이 가이드를 따라하는 것을 시도하고있다 :디버깅 링커 오류 - SDL 정적 라이브러리

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

내가 그러나 나는의 libSDL2.a 정적 라이브러리를 구축 할 수 있어요 그것을 사용하는 그의 안녕하세요 세계 응용 프로그램을 만들려고 할 때 링커 오류가 발생합니다.

그의 지시에 따라
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) 

, 나는 프로젝트 템플릿을 복사하고 내가 빌드 페이즈에서 내장 libSDL2.a lib 디렉토리에 추가 -> 라이브러리 메뉴와 링크 진 :

enter image description here

어떤 제안을 이 문제를 어떻게 디버깅 할 수 있습니까?

편집 : 라이브러리를 사용하는 프로젝트 내 빌드 타겟 구성 :

enter image description here

enter image description here

+1

아키텍처가 맞습니까? 장치 용으로 별도로 제작한다면 시뮬레이터에서 사용할 수 없습니다 ... 먼저 확인하십시오 ... – Macmade

+0

올바른 대상으로 구축했다고 믿지만 제 질문이 있습니다. 확실한 방법을 모르겠다. 이 도구를 실행할 때 이것은 iphone 5 시뮬레이터에서 실행하기 위해 빌드 한 라이브러리에 대한 내 출력입니다. lipo -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 아키텍처 : i386 – Hoofamon

+0

위의 명령에서 "... clang -arch x86_64"이므로 i386 정적 아카이브를 x86_64 바이너리에 연결하려고합니다. –

+0

어떻게 변경할 수 있습니까? 이 프로젝트의 빌드 구성에 대한 스크린 샷을 추가했습니다. 아키텍처 및 유효한 아키텍처의 두 필드를 볼 수 있지만 목록이 없습니다. x86_64 – Hoofamon