2012-04-28 5 views
3

$ NDK/build/tools/makestandalone- toolchain.shスクリプトで作成されたスタンドアロンNDKツールチェーンを使用して、Android用プロトコルバッファを構築するのに問題があります。右、スタンドアロンNDKツールチェーンを使用したプロトコルバッファの作成

のpthreadライブラリーが欠落していることを意味すると思わ
libtool: link: g++ -Wall -Wwrite-strings -Woverloaded-virtual -Wno-sign-compare -O2 -g -DNDEBUG -o protoc main.o ./.libs/libprotobuf.a ./.libs/libprotoc.a /home/sizeak/AudioFingerprinting/ProtoBuf/jni/src/.libs/libprotobuf.a -lz -lc 
./.libs/libprotoc.a(plugin.pb.o): In function `GoogleOnceInit': 
/home/sizeak/AudioFingerprinting/ProtoBuf/jni/src/./google/protobuf/stubs/once.h:115: undefined reference to `pthread_once' 

、しかしSYSROOTはNDKスクリプトによって作成されたので、すべてのものを含める必要があります。私がいる問題は、このですか?私はどこかで、スタンドアロンのツールチェーンを使用しているときにpthreadを明示的にリンクする必要はないと読んでいます。

./configure --host=arm-eabi --with-sysroot=$SYSROOT CC=$CC --enable-cross-compile --with-protoc=protoc LIBS="-lc" 

ここで、環境変数はスクリプトによって作成されたsysrootを指すように設定されています。

私はこの問題をネット上のいくつかのページで見てきましたが、誰も回答を投稿していないようです。誰も助けることができますか?

+0

あなたのAndroid AppをProtoBufにしていて、共有ライブラリを作成してこのAndroid Appで使用しようとしていますか?あなたはandroid.mkファイルのpthreadオプションについて言及していますか? – Raulp

+0

ProtoBufは、スタンドアローンのツールチェインオプションを発見する前に、ndk-buildを使ってライブラリをビルドしようとするプロジェクトでした。 –

答えて

6

は、私がここで見つかった情報使用して、NDK-buildメソッドを使用して、それを構築するために管理:セットアップするにconfigureスクリプトをHow to build protocol buffer by Android NDK

を、私はこれらのコマンドを実行しました:

export CFLAGS="-march=armv7-a -mfloat-abi=softfp -DGOOGLE_PROTOBUF_NO_RTTI" 
export CC=arm-linux-androideabi-gcc 
export SYSROOT=$NDK/platforms/android-9/arch-arm 
./configure --host=arm-eabi --with-sysroot=$SYSROOT CC=$CC --enable-cross-compile --with-protoc=protoc LIBS="-lc" 

これはApplication.mkです

APP_STL := gnustl_static 
APP_ABI := armeabi-v7a armeabi 
APP_PROJECT_PATH := ./ 
APP_BUILD_SCRIPT := ./Android.mk 

をそしてAndroid.mkを使用::私が使用

# Copyright (C) 2009 The Android Open Source Project 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#  http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 
# 
# 

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
CC_LITE_SRC_FILES := \ 
src/google/protobuf/stubs/common.cc        \ 
src/google/protobuf/stubs/once.cc        \ 
src/google/protobuf/extension_set.cc        \ 
src/google/protobuf/generated_message_util.cc     \ 
src/google/protobuf/message_lite.cc        \ 
src/google/protobuf/repeated_field.cc       \ 
src/google/protobuf/wire_format_lite.cc       \ 
src/google/protobuf/io/coded_stream.cc       \ 
src/google/protobuf/io/zero_copy_stream.cc      \ 
src/google/protobuf/io/zero_copy_stream_impl_lite.cc 


COMPILER_SRC_FILES := \ 
src/google/protobuf/descriptor.cc \ 
src/google/protobuf/descriptor.pb.cc \ 
src/google/protobuf/descriptor_database.cc \ 
src/google/protobuf/dynamic_message.cc \ 
src/google/protobuf/extension_set.cc \ 
src/google/protobuf/extension_set_heavy.cc \ 
src/google/protobuf/generated_message_reflection.cc \ 
src/google/protobuf/generated_message_util.cc \ 
src/google/protobuf/message.cc \ 
src/google/protobuf/message_lite.cc \ 
src/google/protobuf/reflection_ops.cc \ 
src/google/protobuf/repeated_field.cc \ 
src/google/protobuf/service.cc \ 
src/google/protobuf/text_format.cc \ 
src/google/protobuf/unknown_field_set.cc \ 
src/google/protobuf/wire_format.cc \ 
src/google/protobuf/wire_format_lite.cc \ 
src/google/protobuf/compiler/code_generator.cc \ 
src/google/protobuf/compiler/command_line_interface.cc \ 
src/google/protobuf/compiler/importer.cc \ 
src/google/protobuf/compiler/main.cc \ 
src/google/protobuf/compiler/parser.cc \ 
src/google/protobuf/compiler/plugin.cc \ 
src/google/protobuf/compiler/plugin.pb.cc \ 
src/google/protobuf/compiler/subprocess.cc \ 
src/google/protobuf/compiler/zip_writer.cc \ 
src/google/protobuf/compiler/cpp/cpp_enum.cc \ 
src/google/protobuf/compiler/cpp/cpp_enum_field.cc \ 
src/google/protobuf/compiler/cpp/cpp_extension.cc \ 
src/google/protobuf/compiler/cpp/cpp_field.cc \ 
src/google/protobuf/compiler/cpp/cpp_file.cc \ 
src/google/protobuf/compiler/cpp/cpp_generator.cc \ 
src/google/protobuf/compiler/cpp/cpp_helpers.cc \ 
src/google/protobuf/compiler/cpp/cpp_message.cc \ 
src/google/protobuf/compiler/cpp/cpp_message_field.cc \ 
src/google/protobuf/compiler/cpp/cpp_primitive_field.cc \ 
src/google/protobuf/compiler/cpp/cpp_service.cc \ 
src/google/protobuf/compiler/cpp/cpp_string_field.cc \ 
src/google/protobuf/compiler/java/java_enum.cc \ 
src/google/protobuf/compiler/java/java_enum_field.cc \ 
src/google/protobuf/compiler/java/java_extension.cc \ 
src/google/protobuf/compiler/java/java_field.cc \ 
src/google/protobuf/compiler/java/java_file.cc \ 
src/google/protobuf/compiler/java/java_generator.cc \ 
src/google/protobuf/compiler/java/java_helpers.cc \ 
src/google/protobuf/compiler/java/java_message.cc \ 
src/google/protobuf/compiler/java/java_message_field.cc \ 
src/google/protobuf/compiler/java/java_primitive_field.cc \ 
src/google/protobuf/compiler/java/java_service.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_enum.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_enum_field.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_field.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_file.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_generator.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_helpers.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_message.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_message_field.cc \ 
src/google/protobuf/compiler/javamicro/javamicro_primitive_field.cc \ 
src/google/protobuf/compiler/python/python_generator.cc \ 
src/google/protobuf/io/coded_stream.cc \ 
src/google/protobuf/io/gzip_stream.cc \ 
src/google/protobuf/io/printer.cc \ 
src/google/protobuf/io/tokenizer.cc \ 
src/google/protobuf/io/zero_copy_stream.cc \ 
src/google/protobuf/io/zero_copy_stream_impl.cc \ 
src/google/protobuf/io/zero_copy_stream_impl_lite.cc \ 
src/google/protobuf/stubs/common.cc \ 
src/google/protobuf/stubs/once.cc \ 
src/google/protobuf/stubs/structurally_valid.cc \ 
src/google/protobuf/stubs/strutil.cc \ 
src/google/protobuf/stubs/substitute.cc 

# C++ full library 
# ======================================================= 
#include $(CLEAR_VARS) 

LOCAL_MODULE := libprotobuf-lite 
LOCAL_MODULE_TAGS := optional 

LOCAL_CPP_EXTENSION := .cc 

LOCAL_SRC_FILES := \ 
$(CC_LITE_SRC_FILES)            #\ 
#src/google/protobuf/stubs/strutil.cc        \ 
#src/google/protobuf/stubs/substitute.cc       \ 
#src/google/protobuf/stubs/structurally_valid.cc     \ 
#src/google/protobuf/descriptor.cc        \ 
#src/google/protobuf/descriptor.pb.cc        \ 
#src/google/protobuf/descriptor_database.cc      \ 
#src/google/protobuf/dynamic_message.cc       \ 
#src/google/protobuf/extension_set_heavy.cc      \ 
#src/google/protobuf/generated_message_reflection.cc    \ 
#src/google/protobuf/message.cc         \ 
#src/google/protobuf/reflection_ops.cc       \ 
#src/google/protobuf/service.cc         \ 
#src/google/protobuf/text_format.cc        \ 
#src/google/protobuf/unknown_field_set.cc       \ 
#src/google/protobuf/wire_format.cc        \ 
#src/google/protobuf/io/gzip_stream.cc       \ 
#src/google/protobuf/io/printer.cc        \ 
#src/google/protobuf/io/tokenizer.cc        \ 
#src/google/protobuf/io/zero_copy_stream_impl.cc     \ 
#src/google/protobuf/compiler/importer.cc       \ 
#src/google/protobuf/compiler/parser.cc 

LOCAL_C_INCLUDES := \ 
$(LOCAL_PATH)/src 

LOCAL_C_INCLUDES := \ 
$(LOCAL_PATH)/android \ 
bionic \ 
$(LOCAL_PATH)/src \ 
$(JNI_H_INCLUDE) 

LOCAL_SHARED_LIBRARIES := \ 
libz libcutils libutils 
LOCAL_LDLIBS := -lz 
# stlport conflicts with the host stl library 
#ifneq ($(TARGET_SIMULATOR),true) 
#LOCAL_C_INCLUDES += external/stlport/stlport 
#LOCAL_SHARED_LIBRARIES += libstlport 
#endif 

# Define the header files to be copied 
#LOCAL_COPY_HEADERS := \ 
# src/google/protobuf/stubs/once.h \ 
# src/google/protobuf/stubs/common.h \ 
# src/google/protobuf/io/coded_stream.h \ 
# src/google/protobuf/generated_message_util.h \ 
# src/google/protobuf/repeated_field.h \ 
# src/google/protobuf/extension_set.h \ 
# src/google/protobuf/wire_format_lite_inl.h 
# 
#LOCAL_COPY_HEADERS_TO := $(LOCAL_MODULE) 

LOCAL_CFLAGS := -DGOOGLE_PROTOBUF_NO_RTTI 

include $(BUILD_SHARED_LIBRARY) 

プロトコルバッファを使用している別のNDKプロジェクトにビルドライブラリを含めるには、ライブラリを使用してプロジェクトのjniフォルダにライブラリをコピーし、Android.mkを参照して追加する必要がありましたそれ:

... 
... 
LOCAL_LDLIBS := -llog -lOpenSLES -lGLESv2 jni/libprotobuf-lite.so 
include $(BUILD_SHARED_LIBRARY) 

include $(CLEAR_VARS) 

LOCAL_MODULE := protobuf-lite 
LOCAL_SRC_FILES := libprotobuf-lite.so 

include $(PREBUILT_SHARED_LIBRARY) 

私はそれだと思う、誰かがそれが有用だと思う。

+0

共有ありがとうございます。この**。/ Configuration **ファイルには、configureスクリプトの設定が書かれています。 – CoDe

+0

また、次のような処理を行っていますが、ターゲットとなる '' jni/src/google/protobuf/stubs/common.cc .. ''というエラーは発生しません。私が何か不足している場合は、任意の提案! – CoDe

+0

OK ... libソースファイルを追加するのを忘れました...ビルドを開始しましたが、すぐにメッセージでエラーに応答します。** jni/src/google/protobuf/stubs/common.cc:51:2:error: #error "適切なスレッドライブラリがありません。**任意の提案! – CoDe

関連する問題