Какую библиотеку мне добавить, чтобы получить разрешение fcntl64, stat64, ...?

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

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

Это намного лучше моих знаний о кросс-компиляции. Любая идея?

1 ответ

Решение

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

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

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

Другие вопросы по тегам