Не может найти/lib/libc.so.6

Я кросс-компилирую приложение, но соединяю удары с ошибкой что это

"не может найти/lib/libc.so.6".

libc.so.6, который это должно использовать, является тем, который находится в /home/work/worldcom/filesys/lib/libc.so.6. Что я понял превратно здесь?

linking libobj.so
arm-none-linux-gnueabi-g++ obj1.o obj2.o obj2.o  -o libobj.so -L/home/work/worldcom/filesys/usr -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L/home/work/worldcom/filesys -L/home/work/worldcom/filesys/lib -L/home/work/worldcom/filesys/usr/lib -lcurl -shared
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status
make: *** [libobj.so] Error 1

Мой make-файл написан от руки (т.е. не сгенерирован Автоинструментами). Чтобы избежать, чтобы слой "Ваш Make-файл был поврежден", вот некоторые детали от make-файла, который мог бы помочь разъясниться.

CROSS_COMPILE = arm-none-linux-gnueabi-  
SYSROOT = /home/work/worldcom/filesys/  
DESTDIR = /home/work/worldcom/filesys/  

RELEASE_CXXFLAGS = -Os  
DEBUG_CXXFLAGS = -O0 -gstabs  
PKGCONFIG=`env ROOT=/home/work/worldcom/filesys cross-pkg-config glib-2.0 libcurl --cflags`  

CC = $(CROSS_COMPILE)gcc  
CXX = $(CROSS_COMPILE)g++  
LD = $(CROSS_COMPILE)ld  
AR = $(CROSS_COMPILE)ar  

LDFLAGS = -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L$(SYSROOT) -L$(SYSROOT)lib -L$(SYSROOT)usr -L$(SYSROOT)usr/lib -lcurl  

libobj.so: $(LIBOBJ_OBJS)  
        @echo linking $@  
        $(CXX) $^ -o $@ $(LDFLAGS) -shared $(PKG_LIBS) 

Конечно, существует также определение и цель для LIBOBJ_OBJS, но это не важно проблеме.

6
задан T3 H40 supports Monica 2 February 2017 в 08:39
поделиться

3 ответа

Вы не указали, какую версию gcc вы используете, но если она достаточно свежая (4.0.0 и выше меня), вы должны попробовать флаг -sysroot на g++/ld. Укажите на $SYSROOT, как он определен в вашем Makefile.

Если предположить, что версия gcc достаточно свежая, то это сработает.

Надеюсь, это поможет, Гилад

12
ответ дан 10 December 2019 в 00:39
поделиться

Разве Вы не думали, что, возможно, LIBPATH установлен и жестко закодирован для поиска /lib/libc.so.6 и, следовательно, пути /lib?

Пытались ли вы установить такую переменную окружения в командной строке, перед тем, как выпустить make при кросс-компиляции:

LIBPATH=/home/work/worldcom/filesys/lib

В вашем конкретном случае, как вы упомянули в теге "кросс-компиляция", возможно, стоит удалить любые ссылки на /lib, чтобы полностью заставить компоновщик искать в вашем собственном домашнем каталоге, а не вмешиваться в процесс кросс-компиляции.

Другая возможность заключается в том, что компилятор gcc при сборке для вашего окружения, конфигурация при сборке компилятора из исходников, была указана для указания на путь /lib.

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0
ответ дан 10 December 2019 в 00:39
поделиться

Кажется, что makefile сломан, так как предполагается, что libc.so.6 находится в папке /lib/ (обратите внимание на предыдущую косую черту, указывающую абсолютный путь! ). Похоже, в этом и проблема.

.
-3
ответ дан 10 December 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: