我使用SWIG将C++代码封装在Ruby中。SWIG未定义符号
我有八个类定义在八个单独的文件在一个特定的位置。我有两种方法将它们包装在Ruby中。
在第一种方法中,我将所有类放在一个文件中,将该文件放在与SWIG接口文件相同的目录中,并且一切正常。
但是,我被要求链接到文件的原始位置,并将我的接口文件放在不同的目录中。当我编译时,我编译目录中的所有文件以及包装代码,并且没有产生错误。但是,我得到未定义的符号。
我编译shell脚本的一部分是:
g++ -std=c++11 -fPIC -c ../../dir1/dir2/Class.cpp
g++ -std=c++11 -fPIC -c mymodule_wrap.cxx -I/usr/include/ruby-1.9.1 -I/usr/include/ruby-1.9.1/x86_64-linux
我编译所有以同样的方式为“File.cpp”一个其他七个文件。没有编译错误。
然后,当我尝试
require 'mymodule'
c = Mymodule::Class.new
我得到的类的构造函数未定义的符号(I demangled用C++ FILT未定义的符号),它被声明和定义以下。
我编译的方式有问题吗?或者在头文件/源文件和SWIG接口文件的不同位置存在一些问题?因为这与我在一个文件中除了位置以外的所有类没有任何区别。
编辑: 如果我移动头文件中声明的函数的定义,我没有得到未定义的符号。这意味着它实际上甚至没有达到cpp文件中的定义。但为什么?当我没有分离所有的类时,我仍然将定义保存在cpp文件中,并将头文件中的声明保存在...
这是一个答案?还是另一个问题?或澄清? –
@Mark这是一个答案。 – satj