2017-07-19 2 views
0

Also Leute, ich habe zwei Tage lang gekämpft, um GDAL-Bibliotheken mit meiner iOS-Anwendung arbeiten zu lassen. Jedes Mal, wenn ich versuche, mein Programm zu bauen, bekomme ich einen Fehler wie folgt aus:Fehler beim Verknüpfen von C-Bibliotheken, die von Homebrew auf Xcode Project heruntergeladen wurden

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 

... viele ähnliche Probleme ...

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

Wie die EXPERT LEVEL PROGRAMMIER ich bin, ich ging sofort zu Google, um nach anderen mit ähnlichen Problemen zu suchen, und fand, dass es ziemlich viele gab. Im Anschluss an ihre Empfehlungen, habe ich alle folgenden Dinge mehrmals in verschiedenen Aufträgen:

ich gereinigt und versuchte, das Projekt zu bauen wieder
ich den Inhalt der abgeleiteten Datenordner für Xcode gelöscht
I aktualisierte den Kopf Suchpfade, die anderen Linker-Flags, die Framework-Suchpfade und die Bibliothekssuchpfade zu allem, was mir empfohlen wurde und nichts half. Der aktuelle Stand dieser Einstellungen ist wie folgt:
Rahmensuchpfade:
$ (geerbt)
Header-Suchpfade:
$ (geerbt)
„$ {PODS_ROOT}/Headers/Public/DJI-SDK-iOS“
"$ {PODS_ROOT}/Headers/Public/DJI-UILibrary-iOS"
/usr/local/Cellar/gdal/1.11.5_2/include
/usr/local/include
Bibliothek Suchpfade:
-L/usr/local/Keller/gdal/1.11.5_2/lib
-lgdal
/usr/local/Cellar/gdal/1.11.5_2/lib
RUNPATH Suchpfade:
$ (geerbt)
@ executable_path/Frameworks

ich war mehr dieser Fehler empfangen, und ich konnte einige von diesen beheben, indem sie einige Bibliotheken in das Register „Link-Binary mit Bibliotheken“ in den Build-Phasen meines Ziel hinzufügen, Aber diese GDAL-Fehler verschwinden nicht, auch wenn ich die Bibliothek aus der Datei/usr/local/lib verlinke.

Link Binaries With Libraries

Hintergrund: Ich brauche einen Pixel aus einer GeoTIFF-Datei für mein Programm zu sehen. Ich schreibe meine Anwendung in OBJC, aber die GDAL-Bibliotheken sind für C++ oder C.
Ich habe diese Bibliotheken mit Homebrew installiert, und das ging gut, alle Dateien in/usr/local verknüpft, aber sie arbeiten nicht richtig mit Xcode. Ich habe ursprünglich mit dem Schreiben dieser Datei in C++ begonnen, bin aber nach einem Tag mit Fehlern wie diesem zu C gewechselt. Nach dem Wechsel zu C (also würde ich nicht in OBJC++ kompilieren müssen), gehe ich immer noch die gleichen Fehler durch.

Hinweis: Ich verwende auch Cocoapods, um einige andere Bibliotheken zu betreiben, aber Cocoapods hatten keine GDAL-Bibliothek oder ich hätte diesen Weg ausprobiert.

die Handlung verdichtet: Wenn ich das Programm für das iPhone Simulator laufen, anstatt zu versuchen, es auf meinem iPhone 7, das Programm auszuführen kompiliert nur gut und sagt: „Build gelungen“, aber ich habe einen anderen Fehler, wenn es versucht befestigen sie an den Simulator:

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 

ich glaube nicht, seine notwendig, um die Datei zu schließen, die die Fehler verursacht, aber hier ist eine Auswahl, wenn jemand einen Blick nehmen will:

#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]; 
} 

Wie auch immer, danke al Ich für Ihre Hilfe, ich weiß es zu schätzen. Hoffnung yall kann einige hilfreiche Tipps geben.

Antwort

0

Ich fand die Antwort. Ich habe versucht, Mac OS X-Anwendungen in meiner iOS-Anwendung zu installieren. Ja, ich weiß, ziemlich dumm. Ich reparierte das, indem ich herum googelte, bis ich jemanden fand, der eine tutorial für diese Lösung hatte. Hoffe, das hilft jemandem irgendwann.

0

Ich habe keine Xcode oder iOS-Entwicklung getan, aber ich würde vorschlagen, dass die Linker-Fehler behoben, bevor Sie etwas anderes tun:

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

Der Linker nicht das Verzeichnis -L/usr/local/Cellar/gdal/1.11.5_2/lib finden konnten. Es sieht so aus, als hätten Sie nacheinander zwei -L Optionen, also würde ich die erste entfernen und dann überprüfen, ob das Verzeichnis /usr/local/Cellar/gdal/1.11.5_2/lib existiert und die gewünschten Bibliotheken enthält. Dies könnte ein Xcode-Konfigurationsproblem sein. Schau dir an, wo du den Linker einbaust.

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

gleiches Problem hier, die -L Option gibt ein zusätzliches Verzeichnis für Bibliotheken zu suchen, und die -l Option gibt eine bestimmte Bibliothek enthält (in diesem Fall gdal). Die Zeichenfolge -L-lgdal macht keinen Sinn, aber -lgdal macht Sinn.

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

Die Bibliothek, die für die x86_64-Architektur gefunden wurde, aber Sie versuchen, eine arm64 Anwendung zu erstellen. Wenn Sie die Bibliotheken als vorgefertigte Binärdateien haben, dann suchen Sie eine Arm64-Binärdatei. Wenn Sie die Bibliotheken erstellt haben, möchten Sie sie für die arm64-Architektur neu erstellen.

+0

Wenn ich diese Pfade zu "Bibliothek Suchpfade" in Xcode hinzufügen, füge ich sie ohne die "-L" und es liefert die "-L" Sollte ich den Pfad hinzufügen "/usr/local/Cellar/gdal/1.11 .5_2/lib-lgdal "so? –

+0

@ScottDriggers Ich habe noch nie Xcode benutzt, sorry. Alles was ich sagen kann ist, dass 'ld' nicht die gewünschten Parameter bekommt. – David

+0

@ScottDriggers Aber Bibliothek Suchpfade klingt wie der richtige Ort, um diesen Pfad anzugeben, und an anderer Stelle möchten Sie die Bibliothek 'Gdal' angeben – David

Verwandte Themen