0
我有一個主程序,它有一個基類需要被共享庫使用。 基類有一些純粹的虛擬方法,必須覆蓋共享庫中的派生類。 主程序使用dlopen系統調用加載共享庫。 dlopen(「共享文件名」,RTLD_NOW | RTLD_GLOBAL);當使用dlopen加載動態庫時拋出未定義的符號
基類
class RateComputer
{
public:
RateComputer();
virtual ~RateComputer();
virtual void OnMarketData() = default;
private:
};
在共享庫派生的類。
class WeightedRateComputer : public RateComputer
{
public:
WeightedRateComputer();
~WeightedRateComputer();
void OnMarketData() override;
private:
};
和實施
雖然二進制編譯等文件我已經添加-rdynamic標誌。但是在使用dlopen加載庫時,它會給出錯誤「未定義符號:_ZTI12RateComputer」。
int main()
{
void *handle = dlopen("../xx.so", RTLD_LAZY |RTLD_GLOBAL);
if (handle == NULL)
{
printf("%s\n", dlerror()); //throw error here
return 0;
}
return 0;
}
這些方法在哪裏實現? – VTT
重要嗎? – sundq
是的,它比聲明更重要。 – VTT