Сборка Android - runtimeTest связь с ошибкой libld - PullRequest
0 голосов
/ 04 февраля 2012

С тех пор как я обновил свой 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 в LOCAL_SHARED_LIBRARIESсистемы / core / libacc / tests / Androd.mk, но затем я получаю:

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 Ответ

1 голос
/ 27 апреля 2012

Как видно из сообщения об ошибке - 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)
...