c++ - 交叉编译c++以解决树莓派std错误

标签 c++ raspberry-pi cross-compiling libstdc++

我需要为 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/

相关文章:

c++ - 如何检测字符串中的不同字母和数字

c++ - QtConcurrent::run with lambda on mac os 没有匹配函数

java - sudo java -jar 与 java -jar

从 Linux 到 Windows 交叉编译 GTK+ 应用程序?

c++ - Vim 在 C++ 类中的格式化/自动缩进似乎不正确。这是正常的吗?

c++ - Visual Studio SFML 链接器错误

javascript - IoT/WinJS/VS - 无法创建 Web 诊断对象

python - Pi 零 W 连接到两个外设(GPIO 和 USB): how to continuously read from both at same time?

python - 使用 cygwin、dlltool 构建 64 位 libpython27.a

linux - Beaglebone 中的 libmodbus 交叉编译和安装