2016-10-29 17 views
0

私はiOS用SDL2を構築するために、ここで、このガイドに従うことをしようとしています:デバッグリンカエラー - 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) 

、私はプロジェクトテンプレートをコピーして、私はビルドフェーズの下で構築libSDL2.a libに追加 - >ライブラリメニューとのリンクバイナリ:

enter image description here

任意の提案のためにどうすればこの問題をデバッグできますか?

編集:ライブラリを使用するプロジェクトで私のビルドターゲットの設定:

enter image description here

enter image description here

+1

アーキテクチャは正しいですか?あなたは、デバイスごとに個別にそれを構築する場合、あなたはそれをチェックまず...シミュレータでそれを使用することはできません... – Macmade

+0

私は私は、私が正しいターゲットのためにそれを建てたと信じていますが、その中で私の質問にありますどのように確実にするかわからないlibSDL2.a入力ファイルlibSDL2.a -infoリポ脂肪ファイル無脂肪ファイルされていません:私は、このリポツールを実行すると、これは私の私がiphone 5シミュレータで実行するために構築されたライブラリに対して出力され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

のヒントです。 sdl2_ttf、sdl2_image、sdl2_mixerとsdl2_net - すべてのSDLのlibsを構築するときに解決策は、より強力です。それは本当に時間を節約することができます。 – ha100

2

それはあなたが構築された静的ライブラリは、あなたがしている対象のアーキテクチャが含まれていない可能性がありますアプリケーションを構築する。ビルドするプラットフォームのアーキテクチャを含むスタティックライブラリをビルドする必要があります。

また、さまざまなプラットフォーム(iOSやtvOS、iOSやiOS Simulatorなど - シミュレータは別々のプラットフォームなど)のアーキテクチャを単一のバイナリにまとめることは実際にはサポートされていません。ターゲットとしているプラ​​ットフォームごとに別々のライブラリやフレームワークが必要ですが、それぞれのプラットフォームでサポートされているすべてのアーキテクチャのスライスを含むことはもちろんです。

+0

私が言うことができる限り、私は正しいターゲットのためにそれを構築しましたが、そこには私の質問があります。これを実行すると、これは私がiphone 5シミュレータで実行するためにビルドしたライブラリに対する私の出力です:lipo -info libSDL2.a 入力ファイルlibSDL2.aは太いファイルではありません 非脂肪ファイル:libSDL2.a i386 – Hoofamon

+0

上記のコマンドでは、 "... clang -arch x86_64"があるので、i386静的アーカイブをx86_64バイナリにリンクしようとしています。 –

+0

どうすれば変更できますか?このプロジェクトのビルド構成のスクリーンショットを追加しました。アーキテクチャと有効なアーキテクチャの2つのフィールドを参照していますが、どちらもリストしません。x86_64 – Hoofamon

関連する問題