【问题标题】:Which library shall I add to get fcntl64, stat64, ... resolved?我应该添加哪个库来解决 fcntl64、stat64、...?
【发布时间】:2012-06-06 16:28:03
【问题描述】:

我正在尝试为 ARM uClibc 环境构建一个项目,但我缺少一些功能。找不到我应该包含哪个库来解决依赖关系。 nm 不要帮我搜索,因为它在大多数带有工具链的库上都说:

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

更新: 我已经从目标主机复制了 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

这大大超出了我对交叉编译的了解。有什么想法吗?

【问题讨论】:

  • AFAIK 这些是libc 的一部分(为 64 位架构构建)。如果可以的话,您可以使用ldd 来查看libxml2libiconv 所需的库并适当地链接它们。您可以尝试在构建时明确链接 libuClibc 并查看它是否可以解决任何问题
  • 徒劳无功。 @R.. 让我想到这些库(在工具链和目标主机上)可能会使用不同的选项进行编译。将从目标机器复制并重试

标签: c gcc cross-compiling uclibc


【解决方案1】:

听起来你有几个问题:

  1. 您似乎在尝试使用主机的 libxml2.so 副本。这是行不通的。您需要为您的目标系统及其 libc 构建一个。

  2. 您的 uClibc 是在不支持大文件的情况下编译的。返回并修复构建选项或 uClibc。这不是绝对必要的(与 uClibc 链接的正确构建的 libxml2.so 将在不这样做的情况下工作),但使用 pre-large-file 接口确实是倒退的,并且会不必要地限制您的程序。

【讨论】:

  • 1.不,libxml2 来自目标机器(我已经复制了它)。并且错误将类似于“错误格式 ELF64”......所以,它是正确的。 2. 那么,这些函数确实在libuClibc 中?我注意到我的副本(来自工具链)和目标机器上的不同 - 将尝试从目标机器复制一个。
  • 好的,知道了。您的第 2 条评论是正确的:我必须用我当前的 uClibc 重新编译 libxml。
猜你喜欢
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多