我在ubuntu上交叉编译用于ARM处理器的Curl Library,在运行make命令时出现以下错误。 错误“strerror_r必须是POSIX,glibc或vxworks-style”
答案 0 :(得分:2)
这意味着配置无法检测到您的strerror_r
版本(如果您正在为Linux执行此操作,这有点奇怪),因此您可以在lib/curl_config.h
之后手动定义它:< / p>
/* Define to 1 if you have a working POSIX-style strerror_r function. */
#define HAVE_POSIX_STRERROR_R 1
答案 1 :(得分:2)
主要问题是curl的CMake通过CMake command try_run
测试了 libc 功能。但是此命令会生成在交叉编译时无法直接执行的二进制文件。因此,两个变量(HAVE_GLIBC_STRERROR_R
,HAVE_POSIX_STRERROR_R
)都为false,构建失败。
如何解决它有简单的方法。只需安装qemu-user
包即可模拟目标平台的二进制文件,并设置CMAKE_CROSSCOMPILING
和CMAKE_CROSSCOMPILING_EMULATOR
个变量。
例如(当你为aarch64交叉编译时):
cmake \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_CROSSCOMPILING_EMULATOR=/usr/bin/qemu-aarch64 \
..
...当你为目标平台库使用非标准路径时,你应该在那里创建模拟器shell脚本和设置路径:
echo -e '#!/bin/sh\nexec /usr/bin/qemu-aarch64 -L /altroot/aarch64/ "$@"' > /usr/local/bin/qemu-aarch64-altroot
chmod +x /usr/local/bin/qemu-aarch64-altroot
答案 2 :(得分:1)
你可以添加
HAVE_POSIX_STRERROR_R
在编译时向cmake标记。