Mat*_*att 8 c++ makefile cross-compiling
我一直在研究一个c ++项目,但是想把它移植到我的arm处理器上.我已经拥有了所有的交叉编译工具(我正在使用CodeSourcery)并认为我可以将makefile更改为指向该编译器.它使用默认的g ++编译很好,但是当尝试指向交叉编译器的make时,我得到重定位错误:
/home/oryan/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.2/../../../../arm-none-linux-gnueabi/bin/ ld:ServerSocket.o:通用ELF(EM:3)
ServerSocket.o中的重定位:无法读取符号:文件格式错误
collect2:ld返回1退出状态
make:***[simple_server]错误1
似乎我没有设置正确的链接或者它指向错误的位置.我对makefile并不熟悉,可能会遗漏一些明显的东西.我一直在使用的makefile来自http://tldp.org/LDP/LG/issue74/tougher.html,客户端已删除:
# Makefile for the socket programming example
#
simple_server_objects = ServerSocket.o Socket.o simple_server_main.o
all : simple_server
simple_server: $(simple_server_objects)
/home/matt/CodeSourcery/bin/arm-none-linux-gnueabi-g++ -o simple_server $(simple_server_objects)
Socket: Socket.cpp
ServerSocket: ServerSocket.cpp
simple_server_main: simple_server_main.cpp
clean:
rm -f *.o simple_server
Run Code Online (Sandbox Code Playgroud)
现在我手动编译每个文件,它工作得很好,但我想在这里进一步理解.
谢谢!
问题是你已经将你的makefile设置为与新的g ++链接,但是你没有改变你用来构建对象的编译器.
解决此问题的最简单方法是将环境设置CXX为下一个编译器,即
export CXX=/home/matt/CodeSourcery/bin/arm-none-linux-gnueabi-g++
Run Code Online (Sandbox Code Playgroud)
或者只需make通过添加CXX=...到命令行将其设置为给定.
您make clean首先需要,但是您将为编译和链接使用正确的编译器.
您还可以在makefile中指定新的how-to-compile-C++文件规则来指定新的编译器,但环境变量更容易:
.cc.o:
/home/.../g++ $(CPPFLAGS) $(CXXFLAGS) -c
Run Code Online (Sandbox Code Playgroud)