2016-05-10 8 views
1

Apple TVプロジェクトでc/C++共有オブジェクトを読み込みたいとします。Apple TV - ダイナミックライブラリ(dylib)の作成と読み込み

  1. のdlopen:ため、私はいくつかの変更をしたコンパイルと私のApple TVのプロジェクトにロードしたいという事実に

    Link

    : は、私は、次のチュートリアルを使用して簡単なライブラリを作成しますコードが私のViewController.mにあり、ユーザがボタンを押してからdlopenが呼び出されます。私は私のプロジェクトに私のdylibをコピーし、それがバンドルリソースとしてコピーされていることを確認し

    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 
    
  2. // 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); 
    } 
    
  3. はにコンパイルコマンドを変更しました。

dlopenの呼び出しは、私は次のエラーを取得しています失敗した後、私のアプリを実行している:コマンドotoolの

[/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 

結果は次のとおりです。NMの

**> otool -TV libRatings.A.dylib** 
libRatings.A.dylib: 
Table of contents (0 entries) 
module name  symbol name 

結果は次のとおりです。

**>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 

誰も私に何をしているのかアドバイスできますか?違う?

おかげ

+1

あなたが動的にiOSのかtvOSにコードをロードすることはできません...動的ローディングを行う方法がないと思われます。 – bbum

+0

ありがとうございます。代わりに静的リンクを使用することを選択しました... –

+0

おそらく、あなたはこのトリックを使って作ることができますか:http://ddeville.me/2014/04/dynamic-linking – Macabeus

答えて

0

は確かに、私は静的リンクを使用

...

関連する問題