我需要为 Raspberry Pi (armV6) 交叉编译 C/C++ 代码。我按照 http://hertaville.com/2012/09/28/development-environment-raspberry-pi-cross-compiler/ 上的说明进行操作我的主机(Ubuntu 14.04)上的构建工作正常。
因此,在对所需的库感到有些恼火之后,我的项目在我的主机上构建,我很高兴。但是当我将程序传输到我的Raspberry Pi时,出现以下错误:
{ProjectName}: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by {ProjectName})
{ProjectName}: /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by {ProjectName})
所以我怀疑交叉编译器正在使用我的主机的 libstd++.so 而不是交叉编译器的一部分,但我不知道如何修复它。
我正在使用 gcc-linaro-arm-linux-gnueabihf-raspbian/arm-linux-gnueabihf-g++ 交叉编译器。
我尝试运行的程序是由其他人直接在 pi 上编写的,在那里它可以完美地构建、编译和运行。
我的 makefile 如下所示:
CC=arm-linux-gnueabihf-g++
IFLAGS=-pthread -I./headers -lwiringPi -lortp -llinphone
LIBB = -I/home/david/rpi/rootfs/usr/lib/arm-linux-gnueabihf/
CFLAGS=-Wall -std=c++0x
LDFLAGS=-Wall
SOURCES=$(wildcard src/*cpp)
OBJECTS=$(addprefix obj/,$(notdir $(SOURCES:.cpp=.o)))
EXECUTABLE=bin/wackytalky
all: $(SOURCES) LINK_EXEC
debug: CFLAGS += -g
debug: $(SOURCES) LINK_EXEC
LINK_EXEC: $(OBJECTS)
$(CC) $(LDFLAGS) -o $(EXECUTABLE) $^ $(LIBB) $(IFLAGS)
obj/%.o: src/%.cpp
$(CC) $(CFLAGS) -o $@ -c $< $(IFLAGS)
clean:
rm $(EXECUTABLE) obj/*.o
最佳答案
我昨天遇到了和你一样的问题。我还没有时间跟进 Pi 端,所以我只是修改了交叉编译选项(我使用 eclipse)并将 -static-libstdc++
添加到链接器命令中。这会静态链接 Ubuntu 端的代码,因此 Pi 端永远不会出现 .so 的问题。
显然,它会产生更大的可执行文件。
关于c++ - 交叉编译c++以解决树莓派std错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605718/