Обычные программы работают нормально, но когда я перехожу к использованию std::filesystem, который, похоже, используетshared_ptr, я получаю следующий выпуск
./package: symbol lookup error: ./package: undefined symbol: _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_, version GLIBCXX_3.4.26
- Базовый образ Docker: ОТ debian:bullseye
И RPi, и хост имеют одинаковые версии< /li>
$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
$ g++ --version
g++ (Raspbian 10.2.1-6+rpi1) 10.2.1 20210110
Хост
$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
$ arm-linux-gnueabihf-g++ --version
arm-linux-gnueabihf-g++ (Debian 10.2.1-6) 10.2.1 20210110
Дальнейшее исследование выявило следующие различия:
Цель:
$ nm -D /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE
0012b50c W _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEaSEOS5_@@GLIBCXX_3.4.26
0012b4e8 W _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEC1EOS5_@@GLIBCXX_3.4.26
Хост:
$ nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE
000000000014c4a0 W _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26
000000000014c410 W _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26
Различия: target=E1EEaSEOS5 хост=E2EEC1EOS5.
ChatGPT говорит, что это относится к версии конструктора. Понятия не имею, как это исправить, кроме статического связывания.
Чем они могут отличаться и есть ли способ обойти это, кроме статического связывания?
< strong>РЕДАКТИРОВАТЬ расчлененные имена
Цель
$ c++filt _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEaSEOS5_
std::__shared_ptr::operator=(std::__shared_ptr&&)
$ c++filt _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE1EEC1EOS5_
std::__shared_ptr::__shared_ptr(std::__shared_ptr&&)
Хост
$ c++filt _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_
std::__shared_ptr::__shared_ptr(std::__shared_ptr&&)
$ c++filt _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev
std::__shared_ptr::__shared_ptr()
Подробнее здесь: https://stackoverflow.com/questions/792 ... difference