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.
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.
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? –
@ScottDriggers Ich habe noch nie Xcode benutzt, sorry. Alles was ich sagen kann ist, dass 'ld' nicht die gewünschten Parameter bekommt. – David
@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