我正在尝试使用 x64 机器和 this 为 ARM(树莓派 2)交叉编译一个应用程序(tvheadend)工具链。
我正在使用以下命令行来配置编译:
./configure --arch=arm-linux-gnueabihf --cc=arm-linux-gnueabihf-gcc --disable-avahi --release --cflags=-DOPENSSL_USE_DEPRECATED
然后我只是制作
。
问题发生在源文件src/utils.c
的编译过程中:该文件包含string.h
,它是从工具链包含目录中正确选择的(让我们说 ARMTOOLCHAIN/usr/include
),然后是 string2.h
,它位于 ARMTOOLCHAIN/usr/include/arm-linux-gnueabihf/bits
,是从系统目录中选择的,而不是 ARMTOOLCHAIN/usr/include/arm-linux-gnueabihf/bits
。
In file included from /usr/include/x86_64-linux-gnu/bits/byteswap.h:35:0,
from ARMTOOLCHAIN/usr/include/endian.h:61,
from /usr/include/x86_64-linux-gnu/bits/string2.h:51,
from ARMTOOLCHAIN/usr/include/string.h:637,
from src/utils.c:21:
src/utils.c: In function ‘sbuf_put_be16’:
src/utils.c:397:9: error: invalid 'asm': invalid operand for code 'w'
u16 = htons(u16);
^
问题是编译器不会在 ARMTOOLCHAIN/usr/include/arm-linux-gnueabihf
中搜索 bits
子目录。我尝试将 -IARMTOOLCHAIN/usr/include/arm-linux-gnueabihf
指定为选项,并在 ARMTOOLCHAIN/usr/include 中创建指向
(避免 bits
的符号链接(symbolic link)arm-linux-gnueabihf
),但这些都不起作用。
最佳答案
尝试在您的configure
调用中修改cflags
:
--cflags="-DOPENSSL_USE_DEPRECATED -nostdinc -nostdinc++"
关于c - 为 ARM 交叉编译时 header 子目录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532481/