【发布时间】:2021-12-05 03:16:34
【问题描述】:
我想在树莓派 4b 上运行使用 gcc-11 编译的程序,而无需指定 LD_LIBRARY_PATH 或链接库路径。
目前,如果我必须在 LD_LIBRARY_PATH 中指定新 libstdc++ 的路径,否则 ld 无法加载正确的库:
pi@cm4:~ $ ./rckam-server --version
./rckam-server: /lib/aarch64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by ./rckam-server)
./rckam-server: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./rckam-server)
./rckam-server: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./rckam-server)
pi@cm4:~ $ LD_LIBRARY_PATH=/usr/local/lib64 ./rckam-server --version
rckam-server version 0.2021.08.23-a5d7a165
pi@cm4:~ $
我正在运行 Raspberry Pi OS 64 位(debian 10.11)。在构建和安装 gcc 11.2.0 之后,我创建了 /etc/ld.so.conf.d/gcc-11.2.0.conf:
pi@cm4:/etc $ cat ld.so.conf.d/gcc-11.2.0.conf
/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/11.2.0
/usr/local/lib64
pi@cm4:/etc $
运行 ldconfig 后,我验证缓存包含相关库:
pi@cm4:/etc $ ldconfig -p | grep libstdc++
libstdc++.so.6 (libc6,AArch64) => /lib/aarch64-linux-gnu/libstdc++.so.6
libstdc++.so.6 (libc6,AArch64) => /usr/local/lib64/libstdc++.so.6
libstdc++.so (libc6,AArch64) => /usr/local/lib64/libstdc++.so
pi@cm4:/etc $ ldconfig -p | grep liblto
liblto_plugin.so (libc6,AArch64) => /usr/local/libexec/gcc/aarch64-unknown-linux-gnu/11.2.0/liblto_plugin.so
pi@cm4:/etc $
这是编译器:
pi@cm4:/etc $ gcc-11 -v
Using built-in specs.
COLLECT_GCC=gcc-11
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/aarch64-unknown-linux-gnu/11.2.0/lto-wrapper
Target: aarch64-unknown-linux-gnu
Configured with: ../gcc-11.2.0/configure -v --enable-languages=c,c++ --program-suffix=-11 --with-cpu=cortex-a72
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 11.2.0 (GCC)
我还应该怎么做才能让 ld 在 /usr/local/lib64 中找到合适的库?
【问题讨论】:
标签: gcc raspberry-pi ld ldd