2011-12-20 26 views
0

私はNDKでSoxらを編集しました。だから、私はすべてのAndroidに優しい共有ライブラリを持っています。Android NDKリンクの問題

sox関数を呼び出すsimple test fileを作成しました。 NDKビルドが私に語った:

undefined reference to `sox_open_read' 

sox_open_readはsox.h.で定義されていますだから、多分それは実際libsox.soにsox_open_read見つけたい

In file included from (...)/sox/sox.h:19 

:私はそれは私にそのファイルに関する警告を与えるので、それはsox.h探しています知っています。さて、ソックスの共有ライブラリがどこにあるかを教えるために100種類の方法を試しました。

LOCAL_SHARED_LIBRARY := sox 
LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

私は静的ライブラリとしてソックスを指定した場合しかし、それは動作します:

#LOCAL_SHARED_LIBRARY := sox 
LOCAL_STATIC_LIBRARIES := sox 
LOCAL_LDLIBS := -L$(LOCAL_PATH_FULL)/jni/libs/libsox.so 

それは私がSOXのlibへのリンクを静的にしたくない私の理解だ - 私は動的にリンクしたいですそれに。

答えて

1

libsox.soは、あらかじめビルドされたライブラリとして定義する必要があります。 makefileを次のように作成し、ビルド済みのlibsox.soをこのメイクファイルと同じディレクトリに置きます。その後、libsoxを再構築したのと同じように使用することができます。ビルドにこのmakefileを含めることを忘れないでください。

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := libsox 
LOCAL_SRC_FILES := libsox.so 

include $(PREBUILT_SHARED_LIBRARY) 
+0

ありがとうございました。しかし、これは問題ではありません。私はすでにすべてのlibsをこのように事前構築されたものとして定義しました:http://pastebin.com/de0u99tu – Matt

+0

私は[this](http://stackoverflow.com/questions/3549432/preventing-functions-from-being静的ライブラリからストリップされたライブラリの場合)が問題になる可能性があります。 libsoxから使用しようとしている関数は、libsoxのビルド中に削除される可能性があります。 nmコマンドを使用して確認できます。 – vassilij