2017-07-19 2 views
0

私は、iOSアプリケーションでGDALライブラリを使用しようと2日間苦労しました。私は私のプログラムを構築しようとするたびに、私は次のようなエラーが表示されます。HomebrewからXcode ProjectにダウンロードしたCライブラリをリンクするときにエラーが発生する

Ld /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Products/Debug-iphoneos/Mapper.app/Mapper normal arm64 
cd /Users/scottdriggers/Documents/XcodeProjects/Mapper 
export IPHONEOS_DEPLOYMENT_TARGET=9.0 
export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.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 arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk -L/Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Products/Debug-iphoneos -L-L/usr/local/Cellar/gdal/1.11.5_2/lib -L-lgdal -L/usr/local/Cellar/gdal/1.11.5_2/lib -F/Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Products/Debug-iphoneos -F/Users/scottdriggers/Documents/XcodeProjects/Mapper/Pods/DJI-SDK-iOS/iOS_Mobile_SDK -F/Users/scottdriggers/Documents/XcodeProjects/Mapper/Pods/DJI-UILibrary-iOS/iOS_UILibrary -filelist /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Intermediates/Mapper.build/Debug-iphoneos/Mapper.build/Objects-normal/arm64/Mapper.LinkFileList -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -Xlinker -rpath -Xlinker @executable_path/Frameworks -miphoneos-version-min=9.0 -dead_strip -Xlinker -object_path_lto -Xlinker /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Intermediates/Mapper.build/Debug-iphoneos/Mapper.build/Objects-normal/arm64/Mapper_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -fobjc-arc -fobjc-link-runtime -ObjC -framework DJISDK -framework DJIUILibrary -ObjC -framework DJISDK -framework DJIUILibrary -I/usr/local/Cellar/gdal/1.11.5_2/include -lgdal.1 -framework CoreGraphics -framework MapKit -framework CoreLocation -framework UIKit -framework Foundation /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Products/Debug-iphoneos/VideoPreviewer.framework/VideoPreviewer -lPods-Mapper -Xlinker -dependency_info -Xlinker /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Intermediates/Mapper.build/Debug-iphoneos/Mapper.build/Objects-normal/arm64/Mapper_dependency_info.dat -o /Users/scottdriggers/Library/Developer/Xcode/DerivedData/Mapper-goynotoybcqaezfpmrcmfwumcokh/Build/Products/Debug-iphoneos/Mapper.app/Mapper 

ld: warning: directory not found for option '-L-L/usr/local/Cellar/gdal/1.11.5_2/lib' 
ld: warning: directory not found for option '-L-lgdal' 
ld: warning: ignoring file /usr/local/Cellar/gdal/1.11.5_2/lib/libgdal.1.dylib, file was built for x86_64 which is not the architecture being linked (arm64): /usr/local/Cellar/gdal/1.11.5_2/lib/libgdal.1.dylib 
Undefined symbols for architecture arm64: 
"_GDALGetRasterXSize", referenced from: 
    -[GEOTIFFManager averageFile:] in GEOTIFFManager.o 
"_GDALGetRasterYSize", referenced from: 
    -[GEOTIFFManager averageFile:] in GEOTIFFManager.o 

... EXPERTレベルプログラマのような多くの同様の問題...

ld: symbol(s) not found for architecture arm64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

は私が、私はすぐに同様の問題を持つ他の人を検索するGoogleに行って、かなりの数があることがわかりました。私はきれいにし、再び
が 私はXcodeの
ために導出されたデータフォルダの内容を削除し 私はヘッダーの更新プロジェクトをビルドしようとした

:彼らの勧告に続いて、私はいくつかの異なる順序で、以下の事柄に数回のすべてをやりました検索パス、その他のリンカーフラグ、フレームワーク検索パス、およびライブラリ検索パスを私が推薦し何も助けてくれなかったものに置き換えます。次のようにこれらの設定の現在の状態がある:
Framework検索パス:
$(継承)
ヘッダ検索パス:
$(継承)
「$ {PODS_ROOT} /ヘッダ/パブリック/ DJI-SDK-iOSの」
"$ {PODS_ROOT} /ヘッダ/公共/ DJI-UILibrary-のiOS"
/usr/local/Cellar/gdal/1.11.5_2/include
は/ usr/local /含ま
ライブラリの検索パス:
-Lは/ usr/local /セラー/ GDAL/1.11.5_2/libに
-lgdal
/usr/local/Cellar/gdal/1.11.5_2/lib
実行パス検索パス:
$ executable_path @
を(継承)/、私はこれらのエラーの多くを受けていたと私は私のターゲットのビルドフェーズに「リンクバイナリとライブラリ」タブの中にいくつかのライブラリを追加することにより、これらのいくつかを修正することができました

をフレームワークしかし、これらのGDALエラーは、たとえ私が/ usr/local/libファイルからライブラリをリンクしたとしても消えることはありません。

Link Binaries With Libraries

背景:私は私のプログラムのためのGeoTIFFファイルからピクセルを表示する必要が。私はOBJCに自分のアプリケーションを書いていますが、GDALライブラリはC++やC用です。
Homebrewを使ってこれらのライブラリをインストールしました。これは/ usr/localにリンクされているすべてのファイルが正常に動作しましたが、 Xcode。私はもともとC++でこのファイルを書いていましたが、このようなエラーの日の後にCに切り替えました。 Cに切り替えると(OBJC++でコンパイルする必要がないので)、私はまだ同じエラーが発生しています。

注:私はCocoapodsを使って他のライブラリを利用していますが、CocoapodsにはGDALライブラリがありませんでした。

プロットが厚く:私が代わりに私のiPhone 7上でそれを実行しようとしているのiPhoneシミュレータ用のプログラムを実行すると、プログラムがうまくコンパイルし、「ビルドが成功した」と言うが、それはしようとしたとき、私は別のエラーが出ます

#include "GEOTIFFManager.h" 
#include "gdal.h" 
#include "cpl_conv.h" 
@interface GEOTIFFManager() 
@end 
@implementation GEOTIFFManager 
- (id) init{ 
    self = [super init]; 
    GDALAllRegister(); 
    return self; 
} 
- (float) getPixelValueOfCoordinate:(double *)coordinate FromFile:(char *)name{ 
    GDALDatasetH* inFile = (GDALDatasetH*)GDALOpen(name, GA_ReadOnly); 
    double* transformation = NULL; 
    GDALGetGeoTransform(inFile, transformation); 
    double* transformedCoord; 
    transformedCoord = reverseTransform(coordinate, transformation); 
    int pixelX = floor(transformedCoord[0]); 
    int pixelY = floor(transformedCoord[1]); 
    float tempArray[1] = {-1.0}; 
    float* output = tempArray; 
    GDALRasterBandH Band = GDALGetRasterBand(inFile, 1); 
    GDALRasterIO(Band, GF_Read, pixelX, pixelY, 1, 1, output, 1, 1, GDT_CFloat32, 0, 0); 
    return output[0]; 
} 

:私は誰もが見てみたい場合は、サンプリングされ、ここでエラーが発生しますが、ファイルを含めるために、その必要はないと思う

dyld: Library not loaded: /usr/local/opt/gdal/lib/libgdal.1.dylib 
Referenced from: /Users/scottdriggers/Library/Developer/CoreSimulator/Devices/1618C362-7271-4E1D-93C7-DE7CE2F15F59/data/Containers/Bundle/Application/905B2454-C731-42DC-8963-5B5C3F4A62A6/Mapper.app/Mapper 
Reason: no suitable image found. 
Did find: /usr/local/opt/gdal/lib/libgdal.1.dylib: mach-o, but not built for iOS simulator 

:シミュレータに添付しますとにかく、ありがとうあなたの助けを借りて、私はそれを感謝します。希望yallはいくつかの役に立つヒントを提供することができます。

答えて

0

答えが見つかりました。 Mac OSXアプリケーションをiOSアプリケーションにインストールしようとしていました。そうです、わかりました、かなりばかな。私はこの解決策のためにtutorialを持っていた誰かを見つけるまで、私は周りにグーグルでこれを修正しました。いつか誰かを助けることを願っています。

0

私はXcodeのか、iOSの開発を行っていませんでしたが、あなたが何かを行う前に、私は、リンカエラーを修正お勧めしたい:

ld: warning: directory not found for option '-L-L/usr/local/Cellar/gdal/1.11.5_2/lib'

リンカをディレクトリ-L/usr/local/Cellar/gdal/1.11.5_2/libを見つけることができませんでした。あなたは2つの-Lオプションを順に持っているようですので、最初に削除してから、ディレクトリ/usr/local/Cellar/gdal/1.11.5_2/libが存在し、必要なライブラリが含まれていることを再度確認します。これはXcodeの設定上の問題かもしれません。リンカに含まれている場所を設定してください。

ld: warning: directory not found for option '-L-lgdal'

同じ問題ここでは、-Lオプションは、ライブラリを検索するための追加ディレクトリを指定し、-lオプションは(この場合、gdalに)含まれるように特定のライブラリを提供します。文字列-L-lgdalは意味をなさないが、-lgdalは意味をなさない。

ld: warning: ignoring file /usr/local/Cellar/gdal/1.11.5_2/lib/libgdal.1.dylib, file was built for x86_64 which is not the architecture being linked (arm64): /usr/local/Cellar/gdal/1.11.5_2/lib/libgdal.1.dylib

発見されたライブラリーは、x86_64のアーキテクチャのためですが、arm64アプリケーションを構築しようとしています。ライブラリをあらかじめ構築されたバイナリとして入手した場合は、arm64バイナリを見つけてください。ライブラリをビルドした場合は、arm64アーキテクチャー用にそれらを再ビルドする必要があります。

+0

これらのパスをXcodeの "Library Search Paths"に追加すると、 "-L"を付けずに追加し、 "-L"を指定するとパス "/usr/local/Cellar/gdal/1.11"を追加する必要があります。 .5_2/lib-lgdal "そうですか? –

+0

@ScottDriggers私はXcodeを一度も使用していません。私が言うことができるのは、 'ld'はあなたが得たいパラメータを得ていないということだけです。 – David

+0

@ScottDriggersしかし、ライブラリ検索パスは、そのパスを指定する適切な場所のように聞こえ、他の場所ではライブラリ 'gdal'を指定したいと思うでしょう。 – David

関連する問題