将livemedia编译为动态库:对虚函数的未定义引用

时间:2011-09-14 10:03:39

标签: c++

我正在尝试将livemedia库编译为共享对象,因此我得到以下.so:

  • libBasicUsageEnvironment.so
  • libgroupsock.so
  • libliveMedia.so
  • libUsageEnvironment.so

这似乎很好,但是当我尝试链接这些库时,我会收到许多未定义引用它们使用的虚函数的错误。

对于我到目前为止所理解的,如果在类中将虚方法定义为

class MyClass
{
   ...
   virtual myMethod (int arg) {...};
   ...
}

正确找到并链接了该方法,但如果代码在.h文件中拆分

类MyClass

{
   ...
   virtual myMethod (int arg);
   ...
}

并在.cpp文件中

MyClass::myMethod (int arg)
{
...
}

它不再起作用了。

现在,我承认我远不是一名C ++大师,但为什么会这样呢?这是g ++的错误吗?或者是否有一些隐藏的语言功能?如果我编译它作为静态库是有效的。

2 个答案:

答案 0 :(得分:0)

也许你在链接器命令行中缺少一个-l(减去小L)开关到包含所需符号的库。

答案 1 :(得分:0)

这不是编译器错误。它表示函数定义可以在库.so中找到,而不是标题,这进一步意味着您没有正确链接。