2016-05-10 15 views
1

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)

Link

Aufgrund der Tatsache, ich will es in meinem Apple-TV-Projekt kompilieren und laden ich einige Änderungen haben:

  1. 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); 
    } 
    
  2. 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 
    
  3. 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

+1

Sie nicht dynamisch Code auf iOS- oder tvOS laden kann. – bbum

+0

Danke. Ich entschied mich für die statische Verknüpfung statt ... –

+0

Vielleicht können Sie es mit diesem Trick machen: http://ddeville.me/2014/04/dynamic-linking – Macabeus

Antwort

0

Tatsächlich scheint, dass es keine Möglichkeit gibt, dynamischen Laden zu tun ...

ich statisch Linken nur verwendet ..