Ich möchte ein c/C++ freigegebenes Objekt in meinem Apple TV-Projekt laden. ich eine einfache Bibliothek mit dem folgenden Tutorial:Apple TV - Erstellen und Laden dynamische Bibliothek (Dylib)
Aufgrund der Tatsache, ich will es in meinem Apple-TV-Projekt kompilieren und laden ich einige Änderungen haben:
Die dlopen Code ist in meinem ViewController.m auf welchen Benutzer drücken Sie eine Taste und dann dlopen heißt.
// Open the library. NSString * libraryname = [NSString stringWithFormat:@"libRatings.A"]; NSString * libraryfullpath = [mainBundle pathForResource:libraryname ofType:@"dylib"]; void *lib_handle = dlopen([libraryfullpath UTF8String], RTLD_NOW); if (lib_handle) { printf("[%s] dlopen(\"%s\", RTLD_NOW): Successful\n", __FILE__, "library"); } else { printf("\n\n[%s] Unable to open library: %s\n", __FILE__, dlerror()); exit(EXIT_FAILURE); }
geändert, um die Zusammenstellung Befehl:
clang -dynamiclib -std=gnu99 -current_version 1.0 -compatibility_version 1.0 -fvisibility=hidden -arch arm64 -mtvos-version-min=9.2 -g -Wno-sign-conversion -fembed-bitcode-marker -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS9.2.sdk Ratings.c -o libRatings.A.dylib
ich meine dylib in mein Projekt kopiert und überprüft, dass es als ein Bündel Ressource kopiert wird.
Wenn meine Anwendung ausgeführt wird, nachdem dlopen Anruf ich die folgenden Fehler fehlgeschlagen bin immer:
[/Users/gfsrnd/Documents/sample1/sample1/sample1/ViewController.m] Unable to open library: dlopen(/var/containers/Bundle/Application/CFF7EC2A-7DF5-4270-9E99-2D5FAEBB0275/sample1 copy.app/libRatings.A.dylib, 2): no suitable image found. Did find:
/var/containers/Bundle/Application/CFF7EC2A-7DF5-4270-9E99-2D5FAEBB0275/sample1 copy.app/libRatings.A.dylib: mmap() error 1 at address=0x1024D4000, size=0x00008000 segment=__TEXT in Segment::map() mapping /var/containers/Bundle/Application/CFF7EC2A-7DF5-4270-9E99-2D5FAEBB0275/sample1 copy.app/libRatings.A.dylib
Ergebnis otool ist:
**> otool -TV libRatings.A.dylib**
libRatings.A.dylib:
Table of contents (0 entries)
module name symbol name
Ergebnis nm ist:
**>nm -ag libRatings.A.dylib**
U ___stack_chk_fail
U ___stack_chk_guard
U ___strncat_chk
0000000000007d30 T _addRating
0000000000007ecc T _clearRatings
0000000000007db8 T _meanRating
U _memset
U _printf
0000000000007ebc T _ratings
U _strdup
U _strlen
U dyld_stub_binder
Kann jemand bitte beraten, was ich tue falsch?
Dank
Sie nicht dynamisch Code auf iOS- oder tvOS laden kann. – bbum
Danke. Ich entschied mich für die statische Verknüpfung statt ... –
Vielleicht können Sie es mit diesem Trick machen: http://ddeville.me/2014/04/dynamic-linking – Macabeus