Я столкнулся с этой ошибкой, пытаясь скомпилировать общий объект из двух наборов объектов. Первый набор содержит один объект .os, скомпилированный из одного файла cpp, сгенерированного SWIG. Второй набор содержит все файлы .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) сгенерирована машиной, и на нее неприятно смотреть, с большим количеством #define, которые усложняют отслеживание. Похоже, что переопределение присутствует во всех объектных файлах второго набора. Я проследил заголовки, включенные во все эти файлы, и, кажется, когда-то был #pragma.
Какие советы люди могут дать, чтобы отследить, в чем/где проблема?