0

我正在尝试构建LIBVNCSERVER为共享库而不是可执行文件。构建 libVNCSERVER 的 make 文件是

include $(CLEAR_VARS)
LOCAL_PATH := $(INITIAL_PATH)
#for vnc
LIBVNCSERVER_ROOT:=./LibVNCServer-0.9.9
LIBVNCSERVER_SRC_FILES:= \
$(LIBVNCSERVER_ROOT)/libvncserver/main.c \
$(LIBVNCSERVER_ROOT)/libvncserver/rfbserver.c \
$(LIBVNCSERVER_ROOT)/libvncserver/rfbregion.c \
$(LIBVNCSERVER_ROOT)/libvncserver/auth.c \
$(LIBVNCSERVER_ROOT)/libvncserver/sockets.c \
$(LIBVNCSERVER_ROOT)/libvncserver/stats.c \
$(LIBVNCSERVER_ROOT)/libvncserver/corre.c \
$(LIBVNCSERVER_ROOT)/libvncserver/hextile.c \
$(LIBVNCSERVER_ROOT)/libvncserver/rre.c \
$(LIBVNCSERVER_ROOT)/libvncserver/translate.c \
$(LIBVNCSERVER_ROOT)/libvncserver/cutpaste.c \
$(LIBVNCSERVER_ROOT)/libvncserver/httpd.c \
$(LIBVNCSERVER_ROOT)/libvncserver/cursor.c \
$(LIBVNCSERVER_ROOT)/libvncserver/font.c \
$(LIBVNCSERVER_ROOT)/libvncserver/draw.c \
$(LIBVNCSERVER_ROOT)/libvncserver/selbox.c \
$(LIBVNCSERVER_ROOT)/libvncserver/cargs.c \
$(LIBVNCSERVER_ROOT)/libvncserver/ultra.c \
$(LIBVNCSERVER_ROOT)/libvncserver/scale.c \
$(LIBVNCSERVER_ROOT)/libvncserver/zlib.c \
$(LIBVNCSERVER_ROOT)/libvncserver/zrle.c \
$(LIBVNCSERVER_ROOT)/libvncserver/zrleoutstream.c \
$(LIBVNCSERVER_ROOT)/libvncserver/zrlepalettehelper.c \
$(LIBVNCSERVER_ROOT)/common/d3des.c \
$(LIBVNCSERVER_ROOT)/common/vncauth.c \
$(LIBVNCSERVER_ROOT)/common/minilzo.c \
$(LIBVNCSERVER_ROOT)/common/zywrletemplate.c

LOCAL_CFLAGS  +=  -Wall \
                                -O3 \
                                -DLIBVNCSERVER_HAVE_ZLIB
LOCAL_C_INCLUDES += \
                                    $(LOCAL_PATH) \
                                    $(LOCAL_PATH)/$(LIBVNCSERVER_ROOT)/libvncserver \
                                    $(LOCAL_PATH)/$(LIBVNCSERVER_ROOT)/common \
                                    $(LOCAL_PATH)/$(LIBVNCSERVER_ROOT)/rfb \
                                    $(LOCAL_PATH)/$(LIBVNCSERVER_ROOT)/

LOCAL_MODULE    := myvnc
#for profiling
LOCAL_CFLAGS := -pg
#LOCAL_STATIC_LIBRARIES += android-ndk-profiler
LOCAL_ARM_MODE := arm  # remove this if you want thumb mode
LOCAL_SRC_FILES := $(LIBVNCSERVER_SRC_FILES)\
                vncmain.c
LOCAL_LDLIBS += -llog -lz -ldl -lpthread
LOCAL_ARM_NEON := true 
LOCAL_SHARED_LIBRARIES := libz
include $(BUILD_SHARED_LIBRARY)

__gnu_mcount_nc我从socket.c文件中得到未定义的引用。

Compile arm    : myvnc <= main.c
Compile arm    : myvnc <= rfbserver.c
Compile arm    : myvnc <= rfbregion.c
Compile arm    : myvnc <= auth.c
Compile arm    : myvnc <= sockets.c
Compile arm    : myvnc <= stats.c
Compile arm    : myvnc <= corre.c
Compile arm    : myvnc <= hextile.c
Compile arm    : myvnc <= rre.c
Compile arm    : myvnc <= translate.c
Compile arm    : myvnc <= cutpaste.c
Compile arm    : myvnc <= httpd.c
Compile arm    : myvnc <= cursor.c
Compile arm    : myvnc <= font.c
Compile arm    : myvnc <= draw.c
Compile arm    : myvnc <= selbox.c
Compile arm    : myvnc <= cargs.c
Compile arm    : myvnc <= ultra.c
Compile arm    : myvnc <= scale.c
Compile arm    : myvnc <= zlib.c
Compile arm    : myvnc <= zrle.c
Compile arm    : myvnc <= zrleoutstream.c
Compile arm    : myvnc <= vncauth.c
Compile arm    : myvnc <= vncmain.c
SharedLibrary  : libmyvnc.so
D:/Android/tool_set/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi-v7a/objs/myvnc/./LibVNCServer-0.9.9/libvncserver/sockets.o: in function rfbShutdownSockets:jni/./LibVNCServer-0.9.9/libvncserver/sockets.c:219: error: undefined reference to '__gnu_mcount_nc'
D:/Android/tool_set/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi-v7a/objs/myvnc/./LibVNCServer-0.9.9/libvncserver/sockets.o: in function rfbDisconnectUDPSock:jni/./LibVNCServer-0.9.9/libvncserver/sockets.c:456: error: undefined reference to '__gnu_mcount_nc'
D:/Android/tool_set/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi-v7a/objs/myvnc/./LibVNCServer-0.9.9/libvncserver/sockets.o: in function rfbCloseClient:jni/./LibVNCServer-0.9.9/libvncserver/sockets.c:464: error: undefined reference to '__gnu_mcount_nc'
D:/Android/tool_set/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi-v7a/objs/myvnc/./LibVNCServer-0.9.9/libvncserver/sockets.o: in function rfbReadExactTimeout:jni/./LibVNCServer-0.9.9/libvncserver/sockets.c:544: error: undefined reference to '__gnu_mcount_nc'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libmyvnc.so] Error 1

请帮忙

4

1 回答 1

0

从 CFLAGS 中删除 -pg,您不需要它来构建库,并且使用它生成的代码将比必要的稍慢。

如果您确实需要分析代码,则需要您自己的 __gnu_mcount_nc 实现。有关更多详细信息,请参阅

http://doc.ironwoodlabs.com/arm-arm-none-eabi/html/getting-started/arm-mcount.html https://code.google.com/p/android-ndk-profiler/wiki/HowItWorks

于 2014-03-28T09:49:09.433 回答