Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接器错误,符号重复,SWIG和C++;载体_C++_Linker_Swig_Stdvector_Duplicate Symbol - Fatal编程技术网

C++ 链接器错误,符号重复,SWIG和C++;载体

C++ 链接器错误,符号重复,SWIG和C++;载体,c++,linker,swig,stdvector,duplicate-symbol,C++,Linker,Swig,Stdvector,Duplicate Symbol,我在试图从两组对象编译一个共享对象时遇到了这个错误。第一组包含一个从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 $g++-shar

我在试图从两组对象编译一个共享对象时遇到了这个错误。第一组包含一个从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
$g++-shared*.os-o Mathlibmodule.so
ld:replicate symbol std::vector::size()contin Mathlib_wrap.o和Capsule.o

SWIG C++包装器(MathLiByLab.O.Soad文件)是机器生成的,而且很难看,很多定义是为了使它难以追踪。看起来第二组中的所有对象文件中都存在重新定义。我查遍了所有这些文件中的标题,这些标题似乎曾经是“pragma”


<> P> >人们有什么建议来追踪问题的所在/位置?

< P>我假设你已经正确地使用IFNDEF/YOX定义了C++库中所有的头文件,之后我会检查你的<代码> .< /C>文件,以确保你在某种程度上不复制一些声明。也许可以尝试先导入一小段库或其他东西

我以前也遇到过类似的问题,但结果总是证明我做了一些愚蠢的事情。恐怕没什么特别的


donno,也许可以发布.i文件。

当有疑问时,假设错误的意思是:实际代码是为每个对象文件中的
vector::size
生成的。这当然看起来很不寻常,因为您希望函数在使用它的每个文件中进行内联扩展

如果不是
std::vector
,我要说的第一件事是,在头中定义的函数没有正确地标记为inline。编译器将在包含该头的每个源文件中生成代码。您使用的是哪个版本的g++以及自定义标准库/向量实现

需要检查的一件事是在(
-O2
)上使用优化进行编译,看看这是否会导致它在创建实际函数时内联调用


另一种可能是您包含了两个不同版本的
向量
include,并且违反了一个定义规则。在这一点上,我不会排除您看到的链接器错误。

鉴于您可以提供的信息量,我不得不建议您停止使用swig。我刚刚继承了一个代码库,我正在从MSVC跨平台库“移植”到*nix+SCons。我自己对代码不是很熟悉,所以我在寻找更一般的建议,比如“某某构造经常导致这些错误”。至于SWIG,我非常希望能够用python编写脚本,所以放弃SWIG不是一个有吸引力的选择。