我在尝试从 2 组对象编译共享对象时遇到了这个错误。第一个集合包含一个从 SWIG 生成的 cpp 文件编译的 .os 对象。第二组包含构成要包装的接口的各个文件中的所有 .so 文件。
$g++ -shared *.os -o Mathlibmodule.so
ld: duplicate symbol std::vector<int, std::allocator<int> >::size() constin Mathlib_wrap.o and Capsule.o
swig c++ 包装器(Mathlib_wrap.o 的源文件)是机器生成的,看起来很难看,有很多#defines 使它更难追踪。看起来重新定义存在于第二组中的所有目标文件中。我已经跟踪了所有这些文件中包含的标题,并且似乎是#pragma once'd。
人们对追查问题出在哪里/在哪里有什么建议?