我正在尝试使用一个库,其中一个类的构造函数如下:
public:
AreaNodeIndex(size_t cacheSize);
我正在尝试在我的程序中实例化这个类的对象,如下所示:
size_t const cacheSize = 50000;
AreaNodeIndex areaNodeIndex(cacheSize);
链接器给我以下错误:
main.o: In function `main':
make: Leaving directory `/home/Dev/_quicktest_build'
main.cpp:(.text+0x212): undefined reference to
osmscout::AreaNodeIndex::AreaNodeIndex(unsigned int)
我认为我已经包含了必要的文件,并且通过编译器链接了库。例如,如果我故意尝试不使用任何参数实例化对象,我会得到这个错误:
../quicktest/main.cpp: In function ‘int main()’:
../quicktest/main.cpp:36: error: no matching function for call to ‘osmscout::AreaNodeIndex::AreaNodeIndex()’
/usr/local/include/osmscout/AreaNodeIndex.h:75: note: candidates are: osmscout::AreaNodeIndex::AreaNodeIndex(size_t)
/usr/local/include/osmscout/AreaNodeIndex.h:33: note: osmscout::AreaNodeIndex::AreaNodeIndex(const osmscout::AreaNodeIndex&)
我可以看到正确的原型(尽管这里说的是size_t,而之前是unsigned int)...
我可以正常使用库的其他部分。以下是涉及该类的实际源文件:
我对为什么会发生这种情况感到困惑。我觉得我可能错过了一些显而易见的东西。
*针对回复: 该库从“sys/types.h”获取size_t,因此我认为我们没有使用不同版本的库。该库在我的系统上使用相同的编译器(g++,linux)进行编译。 更改'const'限定符位置没有任何影响。
我正在链接该库。正如我提到的,我可以无问题地使用库中的其他类。这是链接命令:
g++ -Wl,-O1 -Wl,-rpath,/home/QtSDK/Desktop/Qt/473/gcc/lib -o quicktest main.o -L/home/QtSDK/Desktop/Qt/473/gcc/lib -losmscout -lpthread
该库名称为“osmscout”。
kfl
objdump -t libosmscout | c++filt | grep AreaNodeIndex
? - rodrigo