簡體   English   中英

將livemedia編譯為動態庫:對虛擬函數的未定義引用

[英]compiling livemedia as dynamic library: undefined references to virtual functions

我試圖將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 ++的錯誤嗎? 還是該語言有一些隱藏的功能? 如果我將其編譯為靜態庫,則可以正常工作。

也許您在鏈接器命令行中缺少指向包含所需符號的庫的-l(減L)開關。

這不是編譯器錯誤。 它表明函數定義是在庫.so中找到的,而不是在標頭中找到的,這進一步意味着您未正確鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM