【lammps插件开发】函数签名不一致情况
·
1. 环境
同知乎
zqc-少年意气
2. 报错
Open of file /path/fix_crystallize_plugin.so failed: /path/fix_crystallize_plugin.so: undefined symbol: _ZN9LAMMPS_NS5Error3oneERKSsiS2_
ERROR: Unrecognized fix style 'crystallize' (src/modify.cpp:924)
Last command: fix crystallize zero_group crystallize a.txt
===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= EXIT CODE: 1
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
===================================================================================
其中重点是:undefined symbol: _ZN9LAMMPS_NS5Error3oneERKSsiS2_
简单来说就是error输出没和编译的时候的 liblammps.so 连接上
3. 排查
(base) [a@a]$ nm -D /path/apps/deepmd/3.0.0/lib/liblammps.so | c++filt | grep Error
000000000065c540 T LAMMPS_NS::Error::one(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int,
(base) [a@a]$ nm -D fix_crystallize_plugin.so | c++filt | grep Error::one
U LAMMPS_NS::Error::one(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int, std::bas
可以看到库中的签名与我们编译好的插件的函数签名不相同。
并且我们插件的Error显示的是U,代表没连上。
4. 解决
由于是使用了不同的ABI
我这边的情况是
cmake -DMPI_CXX_COMPILER=$(which mpicxx) -DDEBUG=ON\
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CUDA_STANDARD=17 \
-DCMAKE_CXX_FLAGS="-D_GLIBCXX_USE_CXX11_ABI=1"
make && cd test/ && sh run.sh
解决。
具体设置,问大模型更快。
更多推荐


所有评论(0)