我正在尝试将livemedia库编译为共享对象,因此我得到以下.so:
这似乎很好,但是当我尝试链接这些库时,我会收到许多未定义引用它们使用的虚函数的错误。
对于我到目前为止所理解的,如果在类中将虚方法定义为
class MyClass
{
...
virtual myMethod (int arg) {...};
...
}
正确找到并链接了该方法,但如果代码在.h文件中拆分
类MyClass
{
...
virtual myMethod (int arg);
...
}
并在.cpp文件中
MyClass::myMethod (int arg)
{
...
}
它不再起作用了。
现在,我承认我远不是一名C ++大师,但为什么会这样呢?这是g ++的错误吗?或者是否有一些隐藏的语言功能?如果我编译它作为静态库是有效的。
答案 0 :(得分:0)
也许你在链接器命令行中缺少一个-l(减去小L)开关到包含所需符号的库。
答案 1 :(得分:0)
这不是编译器错误。它表示函数定义可以在库.so
中找到,而不是标题,这进一步意味着您没有正确链接。