我正在使用此link交叉编译覆盆子Pi的Qt,我正面临一些问题。在做sudo make
时,我得到以下内容:
~/rpi-xtools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-ld -Wl,--gc-sections -Wl,-O1 -fuse-ld=gold -o ../../../bin/moc .obj/moc.o .obj/preprocessor.o .obj/generator.o .obj/parser.o .obj/token.o .obj/main.o -L/home/ytan/rpi-xtools/delme/qtbase/lib -lQt5Bootstrap -lpthread
/home/ytan/rpi-xtools/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-ld: unrecognized option '-Wl,--gc-sections'
我知道-Wl,--gc-sections
是arm-linux-gnueabihf-g ++的命令而不是arm-linux-gnueabihf-ld,但我不知道我应该深入研究哪些Makefile来改变arm-linux- gnueabihf-ld to arm-linux-gnueabihf-g ++。
答案 0 :(得分:0)
arm-linux-gnueabihf-ld: unrecognized option '-Wl,--gc-sections'
您正在直接调用链接器。链接器获取--gc-sections
,而不是-Wl,--gc-sections
。
如果您通过编译器驱动程序进行链接,那么您将使用-Wl,--gc-sections
。该配方看起来像arm-linux-gnueabihf-gcc ... -o moc -Wl,--gc-sections
。
确保您的编译标记包括-ffunction-sections
和/或-fdata-sections
。
我不知道我应该将哪个Makefile改为arm-linux-gnueabihf-ld to arm-linux-gnueabihf-g ++。
由于直接调用链接器,并且项目设置正确,因此您只需要:
CPPFLAGS="-DNDEBUG -g2 -O3 ... " \
CFLAGS="... -ffunction-sections -fdata-sections" \
CXXFLAGS="... -ffunction-sections -fdata-sections" \
LDFLAGS="... --gc-sections" \
./configure <other config options>
如果您有一定的灵活性,那么您应该通过编译器驱动程序转换为链接。这是Clang和GCC人员推荐的内容,它可以让您轻松完成诸如使用清理程序(-fsanitize=address
,-fsanitize=undefined
等)测试程序。编译器将为您添加适当的库。否则,您需要自己解决这些问题(在某些系统上非常重要,例如OS X)。