Question

I am trying to build LIBVNCSERVER as shared library instead of executable. The make file to build libVNCSERVER is

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)

I get undefined reference to __gnu_mcount_nc from socket.c file.

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

Help please

Was it helpful?

Solution

Remove the -pg from CFLAGS, you don't need it to build the library, and with it the generated code will be slightly slower than necessary.

If you really need to profile the code, you will need your own implementation of __gnu_mcount_nc. For more details, see

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top