由于我升级了我的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.
我做错了什么?
答案 0 :(得分:1)
正如您在错误消息中看到的那样 - undefined reference to 'dlsym'
,在尝试完成编译和链接main.cpp --> main.o --> main
时,GNU链接器ld
不知道函数dlsym
可以是使用dl
库解决。我们可以通过简短地传递参数gcc
或ld
来通知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)