SWIG未定义的符号
SWIG undefined symbols
我正在使用SWIG在Ruby中包装c++代码。
我在特定位置的八个独立文件中定义了八个类。我有两种方法在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
我为Class的构造函数获得了一个未定义的符号(我使用c++filt解析了未定义的符号),它是声明和定义的。
我编译的方式有问题吗?或者当涉及到头/源文件和SWIG接口文件的不同位置时,是否存在一些问题?因为这与我将所有类放在一个文件中没有任何不同,除了位置。
编辑:如果我在头文件中移动声明函数的定义,我就不会得到未定义的符号。这意味着它实际上甚至没有达到cpp文件中的定义。但是为什么呢?当我所有的类都没有分开时,我仍然将定义保存在cpp文件中,并将声明保存在头文件中…
创建共享库时,它不知道源代码的目标文件在哪里,因此它永远不知道头文件中声明的任何定义。
对我来说,所有的目标文件都是在我编译所有东西的接口文件的同一个文件夹中创建的,我添加了这个:
g++ -shared Class.o mymodule_wrap.o -o mymodule.so
到我的编译shell脚本。在我使用extconf makefile创建脚本之前,我不确定它在哪里搜索对象文件。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- 在C++中使用内联方法时出现未定义的符号错误
- 引擎节点:未定义的符号:_ZTV6Config
- 未定义的引用,尽管存在符号,但 std::experimental::可选
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- C++ 中 dlsym 的未定义符号
- MacOS 上的 Xcode 11 项目不在一个函数中使用 sin 和 cos:未定义的符号"___sincosf_stret"
- 仅在 MacOS 上析构函数的未定义符号
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 从 C++ 到 Python 的 SWIG:未定义的符号导入问题
- 使用静态变量未解析的外部符号/未定义的引用时出错
- 无法导出mexfunction:符号未定义的collect.exe2.exe:错误:ld返回1退出状态
- 模板生成错误:体系结构的符号未定义 x86_64:
- 继承-符号未定义
- __next_prime符号未定义
- 错误:对cv:: videoccapture::~ videoccapture()的引用符号未定义,命令行中缺少DSO