Я столкнулся с этой ошибкой, пытаясь скомпилировать общий объект из двух наборов объектов. Первый набор содержит один объект .os, скомпилированный из одного файла cpp, сгенерированного SWIG. Второй набор содержит все .so-файлы из отдельных файлов, которые составляют интерфейс для упаковки.Ошибка компоновщика с дублированными символами, векторами SWIG и C++
$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.
Какой совет у людей есть для отслеживания того, что/где проблема?
Учитывая объем информации, которую вы могли бы предоставить, я должен был бы рекомендовать вам прекратить использование swig. –
Его кодовая база, которую я только что унаследовал, что я «портирую» из кросс-платформенных библиотек от MSVC до * nix + SCons. Я сам не очень хорошо разбираюсь в коде, поэтому я искал более общие рекомендации, такие как «такая-то и такая конструкция часто вызывает эти ошибки». Что касается SWIG, я очень хочу иметь возможность писать сценарии на python, поэтому утилизация SWIG не является привлекательным вариантом. –