简单的一点东西

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

解决。
具体设置,问大模型更快。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐