【发布时间】:2011-01-29 23:12:55
【问题描述】:
所以我正在使用 SWIG 库开发一个小型 python 扩展。我使用 3 个命令来编译扩展。前两个使用 gcc,最后一个使用 g++,结果给出了 python 扩展。我的问题是,在 gcc 编译代码没有错误后,g++ 开始抱怨它找不到我的类定义之一(下面有更多详细信息)。我不能调试它,因为它实际抱怨的部分是二进制文件。我应该如何为 g++ 编译器定义类?
给出问题的代码包含一个名为“cpprenderer.cpp”的文件中的函数,该函数创建了一个在“mesh.cpp”中定义的类网格的实例。当然,我有一个定义该类的头文件,并从 cpprenderer.cpp 链接到它。
我的代码: 摘自 cpprenderer.cpp:
#include "src/mesh.h"
int addMesh()
{
int newMesh = displayList.size();
mesh meshObj = mesh();
displayList.push_back(meshObj);
return newMesh;
}
这是完整的mesh.h头文件:
class mesh
{
public:
mesh(void);
void render(void);
int createGroup(void);
float rotationX;
float rotationY;
float rotationZ;
float x;
float y;
float z;
};
最后,这些是我使用的命令,以及它们的输出:
C:\Users\Bart\Desktop\swig test>cd C:\Users\Bart\Desktop\swig test
C:\Users\Bart\Desktop\swig test>C:\swig\swig.exe -python -c++ cpprenderer.i
C:\Users\Bart\Desktop\swig test>c:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\python26\include -IC:\python26\PC -c cpprenderer_wrap.cxx -o build\temp.win32-2. \Release\cpprenderer_wrap.o "-lopengl32 -lglu32 -lgdi32 -lglut32"
C:\Users\Bart\Desktop\swig test>c:\MinGW\bin\gcc.exe -mno-cygwin -mdll -O -Wall -IC:\python26\include -IC:\python26\PC -c cpprenderer.cpp -o build\temp.win32-2.6\Release\cpprenderer.o "-lopengl32 -lglu32 -lgdi32 -lglut32"
C:\Users\Bart\Desktop\swig test>c:\MinGW\bin\g++.exe -mno-cygwin -shared -s build\temp.win32-2.6\Release\cpprenderer_wrap.o build\temp.win32-2.6\Release\cpprenderer.o -LC:\python26\libs -LC:\python26\PCbuild -lpython26 -lmsvcr90 -lopengl32 -lglu32 -lgdi32 -lglut32 -o "C:\Users\Bart\Desktop\swig test\_cpprenderer.pyd"
build\temp.win32-2.6\Release\cpprenderer.o:cpprenderer.cpp:(.text+0x697): undefined reference to `mesh::mesh()'
collect2: ld returned 1 exit status
如您所见,gcc 可以很好地编译我的代码,但是当 g++ 执行此操作时,它无法找到我在头文件中定义的网格构造函数的定义。
有谁知道我做错了什么?
【问题讨论】: