2012-02-04 31 views
0

因为我升级了我的gcc我似乎无法编译我的Android 2.1项目。建立Android - runtimeTest链接与libld错误

现在有一个链接错误:

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系统/核心/ libacc /测试/ 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

正如你可以在错误信息中看到 - undefined reference to 'dlsym',同时努力完成编译和链接main.cpp --> main.o --> main,GNU连接ld不知道功能dlsym可以通过使用dl库来解决。我们可以通过传递参数--library dl-ldl来通知gcclddl库。

对于您的Android交叉编译的特定情况下,又回到了再次的错误消息:

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

你应该找到一个文件在~/tdroid/system/core/libacc/tests/Android.mk称为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)