2016-08-26 6 views
16

の動的ライブラリを作成することはできません。しかし、私たちは、迅速なプロジェクト内で使用できるようにダイナミックライブラリを作成したいと考えています。は、我々は脂肪静的ライブラリにPJSIPをコンパイルするスクリプトをしましたPJSIP

アップデート2016年9月9日:

"--enable-共有" オプションを使用してPJSIPをコンパイル、LIBの のほとんどが正しく構築されています。 これらが正しいのに対しただし、いくつかのLIBSのではなく、arm64

libg7221codec.dylib is architecture: x86_64 
libgsmcodec.dylib is architecture: x86_64 
libilbccodec.dylib is architecture: x86_64 
libresample.dylib is architecture: x86_64 
libyuv.dylib is architecture: x86_64 

のこのケースで x86_64版、間違ったアーキテクチャ用にコンパイルされています

libpjsip.dylib is architecture: arm64 
libpjsua.dylib is architecture: arm64 
libpjsua2.dylib is architecture: arm64 

私たちは建物を起動すると:

+ ./configure-iphone --enable-shared 
+ make dep 
+ make clean 

alが正しく完了しますが

+ make 

これらの警告を生成します。

ld: warning: -undefined dynamic_lookup is deprecated on iOS 
ld: warning: -flat_namespace is deprecated on iOS 

と、このように見えるの警告がたくさん:

ld: warning: ignoring file 
output/libilbccodec-arm64-apple-darwin_ios/iLBC_decode.o, file was built 
for unsupported file format (0xCF 0xFA 0xED 0xFE 0x0C 0x00 0x00 0x01 0x00 
0x00 0x00 0x00 0x01 0x00 0x00 0x00) which is not the architecture being 
linked (x86_64): output/libilbccodec-arm64-apple-darwin_ios/iLBC_decode.o 
ld: warning: ignoring file 
output/libg7221codec-arm64-apple-darwin_ios/common/common.o, file was built 
for unsupported file format (0xCF 0xFA 0xED 0xFE 0x0C 0x00 0x00 0x01 0x00 
0x00 0x00 0x00 0x01 0x00 0x00 0x00) which is not the architecture being 
linked (x86_64): output/libg7221codec-arm64-apple-darwin_ios/common/common.o 

と:

ld: warning: ignoring file /pjsip/src/third_party/lib/libg7221codec.dylib, 
file was built for x86_64 which is not the architecture being linked 
(arm64): /pjsip/src/third_party/lib/libg7221codec.dylib 

いくつかのlibがコンパイルされている理由かもしれない何正しい アーキテクチャ用であり、一部はありませんか?どのように私はこれを修正することができますか?背景情報について

、 のconfigure-iphoneで印刷されたように、環境変数:

configure-iphone: DEVPATH is not specified, using 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer 
configure-iphone: IPHONESDK is not specified, choosing iPhoneOS9.3.sdk 
configure-iphone: CC is not specified, choosing 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 
configure-iphone: CXX is not specified, using 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 

のconfigure-iphone:

CC = 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 
CXX = 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 
SDKPATH = 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk 
CFLAGS = -miphoneos-version-min=9.0 -DPJ_SDK_NAME="\"iPhoneOS9.3.sdk\"" 
-arch arm64 -isysroot 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk 
LDFLAGS = -O2 -arch arm64 -isysroot 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk 
-framework AudioToolbox -framework Foundation 
AR = 
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool 
-static -o 
RANLIB = echo ranlib 
ARCH = arm64 

初期過程::のenv VARSと./aconfigureを呼び出します

我々がこれまで持っているプロセスは、次のとおりです。

  1. はPJSIPはbashスクリプトと1つのアーキテクチャのための脂肪静的ライブラリを作成します。
  2. libtoolでダイナミックライブラリを作成しようとすると、すべてがlipoとarで分離されたoファイルに展開されます。

しかし、他のフレームワークへのリンクには問題があります。これが事実ですか、それとも何か間違ったことをしますか?

これは、詳細にステップ3:

私たちは、1つのフォルダ内に1つのアーキテクチャのすべてのファイルを持っています。コマンドを実行した後、私たちの出力の

libtool -dynamic *.o -o pjsip.dylib -framework AudioToolbox -framework Foundation -framework AVFoundation -framework CoreFoundation -lSystem -ios_version_min 9.0 

スタート:その後、我々は、このlibtoolのコマンドを実行します

ld: warning: -force_cpusubtype_ALL will become unsupported for ARM architectures 
Undefined symbols for architecture armv7s: 
    "_AVAudioSessionCategoryPlayAndRecord", referenced from: 
     _ca_factory_init in coreaudio_dev.o 
    "_AVAudioSessionModeVoiceChat", referenced from: 
     _ca_factory_init in coreaudio_dev.o 
    "_AudioComponentFindNext", referenced from: 
     _ca_factory_init in coreaudio_dev.o 
     _ca_stream_set_cap in coreaudio_dev.o 
    "_AudioComponentGetDescription", referenced from: 
     _ca_stream_get_cap in coreaudio_dev.o 
    "_AudioComponentInstanceDispose", referenced from: 
     _ca_stream_destroy in coreaudio_dev.o 
    "_AudioComponentInstanceNew", referenced from: 
     _create_audio_unit in coreaudio_dev.o 
    "_AudioConverterDispose", referenced from: 
     _ca_stream_destroy in coreaudio_dev.o 
     _ilbc_dealloc_codec in ilbc.o 
    "_AudioConverterFillComplexBuffer", referenced from: 
     _resample_callback in coreaudio_dev.o 
     _ilbc_codec_encode in ilbc.o 
     _ilbc_codec_decode in ilbc.o 
     _ilbc_codec_recover in ilbc.o 
    "_AudioConverterNew", referenced from: 
     _ilbc_codec_open in ilbc.o 
    "_AudioConverterReset", referenced from: 
     _ca_stream_start in coreaudio_dev.o 
    "_AudioFormatGetProperty", referenced from: 
     _ilbc_codec_open in ilbc.o 
    "_AudioOutputUnitStart", referenced from: 
     _ca_stream_start in coreaudio_dev.o 
    "_AudioOutputUnitStop", referenced from: 
     _ca_stream_start in coreaudio_dev.o 
     _ca_stream_stop in coreaudio_dev.o 
    "_AudioUnitInitialize", referenced from: 
     _create_audio_unit in coreaudio_dev.o 
    "_AudioUnitRender", referenced from: 
     _resample_callback in coreaudio_dev.o 
     _input_callback in coreaudio_dev.o 
    "_AudioUnitSetProperty", referenced from: 
     _create_audio_unit in coreaudio_dev.o 
    "_AudioUnitUninitialize", referenced from: 
     _ca_stream_destroy in coreaudio_dev.o 
    "_CFArrayGetCount", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFArrayGetValueAtIndex", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFDataGetBytePtr", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFHostCreateWithName", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFHostGetAddressing", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFHostStartInfoResolution", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFReadStreamClose", referenced from: 
     _activesock_destroy_iphone_os_stream in activesock.o 
    "_CFReadStreamOpen", referenced from: 
     _activesock_create_iphone_os_stream in activesock.o 
    "_CFReadStreamSetProperty", referenced from: 
     _activesock_create_iphone_os_stream in activesock.o 
    "_CFRelease", referenced from: 
     _activesock_destroy_iphone_os_stream in activesock.o 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_CFStreamCreatePairWithSocket", referenced from: 
     _activesock_create_iphone_os_stream in activesock.o 
    "_CFStringCreateWithCStringNoCopy", referenced from: 
     _pj_getaddrinfo in addr_resolv_sock.o 
    "_Gsm_LPC_Analysis", referenced from: 
     _Gsm_Coder in code.o 
    "_Gsm_Preprocess", referenced from: 
     _Gsm_Coder in code.o 
    "_OBJC_CLASS_$_AVAudioSession", referenced from: 
     objc-class-ref in coreaudio_dev.o 
    "_OBJC_CLASS_$_UIDevice", referenced from: 
     objc-class-ref in os_info_iphone.o 
    "__DefaultRuneLocale", referenced from: 
     __Z8__istypeim in siptypes.o 

答えて

1

共有ライブラリは実行時にロードされています。したがって、システムライブラリパスにインストールすることはできないため、ライブラリにアプリケーションを提供し、dlopen(3)をロードする必要があります。また、あなたの図書館をコーディネートする必要があります。

しかし、これは意味がありません:あなたは、複数のアプリケーションからそれらをロードするとき

  1. 共有ライブラリは、意味をなさない。 iOSでは、これはあなたのアプリケーションとその拡張機能に過ぎません。代わりに動的なフレームワークを使用する必要があります。
  2. 共有ライブラリを検出すると、Appleはおそらくバイナリを拒否し、共有フレームワークを指します。

共有フレームワークにlibsを含めるのは簡単です。静的ライブラリからにリンクしたフレームワークとライブラリを共有フレームワークから追加するだけです。静的ライブラリをコンパイルして、独立したコードを配置するようにします。これはデフォルトでなければなりません。

関連する問題