2012-06-06 4 views
0

Я пытаюсь создать проект для среды ARM uClibc, но у меня есть некоторые функции. Невозможно найти, какую библиотеку я должен включить для разрешения зависимостей. nm не помогает мне искать, так как он говорит на большинстве LIBS приходит с набором инструментов:Какую библиотеку я должен добавить, чтобы получить fcntl64, stat64, ... разрешено?

nm: ./host/usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/libuClibc-0.9.32.1.so: no symbols 

Вот выход из GCC:

./host/usr/bin/arm-unknown-linux-uclibcgnueabi-gcc 
-Wl,-rpath,./host/usr/lib/ 
-Wl,-rpath,./host/usr/../lib/ 
-Wl,-rpath,./host/usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/ 
-Llibzway -o test_so main.o -lzway 
-L./host/usr/lib/ 
-L./host/usr/../lib/ 
-L./host/usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/ -lpthread 
-lxml2 -lz -lm 
./host/usr/lib/libxml2.so: warning: gethostbyname is obsolescent, use getnameinfo() instead. 
./host/usr/lib/libxml2.so: undefined reference to `fcntl64' 
./host/usr/lib/libxml2.so: undefined reference to `fopen64' 
./host/usr/../lib/libz.so: undefined reference to `lseek64' 
./host/usr/lib/libxml2.so: undefined reference to `stat64' 
./host/usr/lib/libiconv.so.2: undefined reference to `mbrtowc' 
./host/usr/lib/libiconv.so.2: undefined reference to `_stdlib_mb_cur_max' 
./host/usr/lib/libiconv.so.2: undefined reference to `wcrtomb' 
./host/usr/lib/libxml2.so: undefined reference to `open64' 
collect2: ld returned 1 exit status 
make: *** [test_so] Error 1 

UPD: Я скопировал uClibc из целевому хосту и явно заданному ссылку на ссылку:

./host/usr/bin/arm-unknown-linux-uclibcgnueabi-gcc 
-Wl,-rpath,./host/usr/lib/ 
-Wl,-rpath,./host/usr/../lib/ 
-Wl,-rpath,./host/usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/ 
-Llibzway -o test_so main.o -lzway 
-L./host/usr/lib/ 
-L./host/usr/../lib/ 
-L./host/usr/arm-unknown-linux-uclibcgnueabi/sysroot/lib/ 
-luClibc-0.9.31 
-lpthread -lxml2 -lz -lm 
./host/usr/bin/../lib/gcc/arm-unknown-linux-uclibcgnueabi/4.5.3/../../../../arm-unknown-linux-uclibcgnueabi/bin/ld: 
    errno: TLS reference in ./host/usr/bin/../arm-unknown-linux-uclibcgnueabi/sysroot/lib/libpthread.so.0 mismatches non-TLS definition in ./host/usr/lib/libuClibc-0.9.31.so section .bss 
./host/usr/bin/../arm-unknown-linux-uclibcgnueabi/sysroot/lib/libpthread.so.0: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
make: *** [test_so] Error 1 

Это большое знание, которое я знаю о кросс-компиляции. Есть идеи?

+0

AFAIK это часть 'libc' (построена для 64-битной арки). Вы можете использовать 'ldd', если он доступен, чтобы просмотреть библиотеки, необходимые для' libxml2' & 'libiconv' и связать их соответствующим образом. Вы можете попытаться связать 'libuClibc' явным при построении и посмотреть, решает ли он что-либо –

+0

, пробовал тщетно. @R .. дал мне идею, что эти библиотеки (в toolchain и на целевом хосте) могут быть скомпилированы с различными параметрами. Скопирует с целевого компьютера и повторите попытку – PoltoS

ответ

1

Похоже, у вас есть несколько вопросов происходит:

  1. Вы, кажется, пытается использовать копию хозяина из libxml2.so. Это не сработает. Вам нужна одна построенная для вашей целевой системы и ее libc.

  2. Ваш uClibc был скомпилирован без большой поддержки файлов. Вернитесь назад и исправьте варианты сборки или uClibc. Это не является строго необходимым (правильно построенный , связанный с uClibc, будет работать без этого), но использование интерфейсов pre-large-file действительно назад и будет излишне ограничивать ваши программы.

+0

1. Нет, 'libxml2' происходит с целевой машины (я скопировал ее). И ошибка будет звучать как «Неверный формат ELF64» ... Итак, это правильный. 2. Итак, эти функции действительно находятся в libuClibc? Я заметил, что моя копия (из инструментальной цепочки) и одна на целевой машине отличаются друг от друга - попытаются скопировать ее с целевой машины. – PoltoS

+0

Хорошо, понял. Ваше замечание № 2 является правильным: мне нужно перекомпилировать libxml с моим текущим uClibc. – PoltoS

Смежные вопросы