构建Android - 与libld错误的runtimeTest链接

时间:2012-02-04 16:53:42

标签: android build linker

由于我升级了我的gcc,我似乎无法编译我的Android 2.1项目。

现在有一个链接错误:

out/host/linux-x86/obj/EXECUTABLES/acc_intermediates/main.o: In function `symbolLookup(void*, char const*)':
/home/roeischuster/tdroid/system/core/libacc/tests/main.cpp:41: undefined reference to `dlsym'
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/acc_intermediates/acc] Error 1
make: *** Waiting for unfinished jobs....
out/host/linux-x86/obj/EXECUTABLES/accRuntimeTest_intermediates/runtimeTest.o: In function `symbolLookup':
/home/roeischuster/tdroid/system/core/libacc/tests/runtimeTest.cpp:66: undefined     reference to `dlsym'
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/accRuntimeTest_intermediates/accRuntimeTest] Error 1

我尝试将libld添加到system / core / libacc / tests / Androd.mk的LOCAL_SHARED_LIBRARIES中,但后来我得到了:

make: *** No rule to make target `out/host/linux-x86/obj/lib/libdl.so', needed by `out/host/linux-x86/obj/EXECUTABLES/accRuntimeTest_intermediates/accRuntimeTest'.  Stop.

我做错了什么?

1 个答案:

答案 0 :(得分:1)

正如您在错误消息中看到的那样 - undefined reference to 'dlsym',在尝试完成编译和链接main.cpp --> main.o --> main时,GNU链接器ld不知道函数dlsym可以是使用dl库解决。我们可以通过简短地传递参数gccld来通知dl--library dl关于-ldl库。

对于您在Android中进行交叉编译的特定情况,请再次返回错误消息:

/home/roeischuster/tdroid/system/core/libacc/tests/main.cpp:41: 
undefined reference to `dlsym'

您应该在Android.mk找到名为~/tdroid/system/core/libacc/tests/Android.mk的文件。要解决编译错误,请在include $(CLEAR_VARS)的每一行之后添加一行LOCAL_LDLIBS += -ldl。您的Android.mk文件现在应该如下所示,如果您在进行更改后再次执行make,则应编译所有内容。干杯:-)。

LOCAL_PATH:= $(call my-dir)

# Executable for host
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= acc 
LOCAL_LDLIBS += -ldl    
LOCAL_SRC_FILES:= \
        main.cpp    
LOCAL_SHARED_LIBRARIES := \
    libacc    
LOCAL_MODULE_TAGS := tests    
include $(BUILD_HOST_EXECUTABLE)

# Executable for target
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= acc 
LOCAL_LDLIBS += -ldl    
LOCAL_SRC_FILES:= \
        main.cpp \
    disassem.cpp    
LOCAL_SHARED_LIBRARIES := \
    libacc    
LOCAL_CFLAGS := -O0 -g      
LOCAL_MODULE_TAGS := tests    
include $(BUILD_EXECUTABLE)

# Runtime tests for host
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= accRuntimeTest    
LOCAL_LDLIBS += -ldl    
LOCAL_SRC_FILES:= \
        runtimeTest.cpp    
LOCAL_SHARED_LIBRARIES := \
    libacc    
LOCAL_MODULE_TAGS := tests    
include $(BUILD_HOST_EXECUTABLE)

# Runtime tests for target
# ========================================================
include $(CLEAR_VARS)
LOCAL_MODULE:= accRuntimeTest

LOCAL_LDLIBS += -ldl    
LOCAL_SRC_FILES:= \
        runtimeTest.cpp    
LOCAL_SHARED_LIBRARIES := \
    libacc    
LOCAL_CFLAGS := -O0 -g    
LOCAL_MODULE_TAGS := tests    
include $(BUILD_EXECUTABLE)