Linux 编译的c++程序,在其他系统中运行报错"/usr/lib/aarch64-linuxgnu/libstdc++.so.6: version "GLIBCXX 3.4.2 not found" " ,如何在编译的时候就避免这样的情况,怎样写Makefile文件
时间: 2024-03-27 20:37:02 浏览: 147
这种报错通常是由于目标系统中的 C++ 标准库版本低于编译时所使用的版本而引起的。为了解决这个问题,可以在编译时使用静态链接库或者在运行时指定动态链接库路径。
使用静态链接库的方法是在编译时加上 `-static` 参数,这会将所有库都链接成静态库,使得程序不再依赖系统中的动态库。例如:
```
g++ -static -o myprogram myprogram.cpp
```
另一种方法是在运行时指定动态链接库路径,可以在程序运行时通过环境变量 `LD_LIBRARY_PATH` 指定动态链接库搜索路径。例如:
```
export LD_LIBRARY_PATH=/path/to/libstdc++:$LD_LIBRARY_PATH
./myprogram
```
关于 Makefile 文件,可以按照以下方式编写:
```
CXX=g++
CXXFLAGS=-Wall -Wextra -O2
LDFLAGS=-static # 静态链接标志
all: myprogram
myprogram: myprogram.o
$(CXX) $(LDFLAGS) -o $@ $^
myprogram.o: myprogram.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f myprogram myprogram.o
```
在上面的 Makefile 中,`LDFLAGS` 变量用于指定链接标志,`-static` 表示使用静态链接库。`myprogram` 目标规则中使用了 `LDFLAGS` 变量,指定了链接标志。`myprogram.o` 目标规则中使用了 `CXXFLAGS` 变量,指定了编译标志。`clean` 目标规则用于清除生成的文件。
阅读全文