2014-01-30 28 views
0

我有一個不是由我寫的.so lib文件。 這是在一個以eclipse爲ide的QNX arm-le系統上。在沒有符號表的共享庫文件中調用函數

如果我用ida pro打開文件,我可以看到很多導出的函數。

我想調用其中一個函數。

我想:

handle = dlopen ("/tmp/lib.so", RTLD_LAZY); 
    if (!handle) { 
     fputs (dlerror(), stderr); 
     exit(1); 
    } 

    cosine = dlsym(handle, "cos"); 
    if ((error = dlerror()) != NULL) { 
     fputs(error, stderr); 
     exit(1); 
    } 

這讓

unknown symbol: _ZTVN10__cxxabiv120__si_class_type_infoE 
unknown symbol: _ZTVN10__cxxabiv120__si_class_type_infoE 
unknown symbol: _ZTVN10__cxxabiv120__si_class_type_infoE 
unknown symbol: _ZTISt9exception 
Unresolved symbols 
+0

它看起來像庫依賴於一些其他未加載的外部庫。 –

回答

2

這是很顯然是C的(mangled)名稱++符號,這意味着你要使用圖書館寫在C++中。您應該嘗試將您的程序與標準C++運行時庫鏈接起來。

+0

你是對的..它確實是一個C++庫。謝謝 – arnold

2

您不區分dlopendlsym錯誤(您應該)。

你得到的錯誤是從dlopen,這意味着/tmp/lib.so對你的標準C++運行時庫的依賴(通常libstdc++.so)的符號,但本身不是鏈接的是libstdc++.so

爲了解決這個問題,你必須libstdc++.so可用,方法是

  • g++,而不是gcc鏈接你的測試程序,或者試圖dlopen前加入-lstdc++的鏈接線,或
  • 調用dlopen("libstdc++.so", RTLD_GLOBAL)/tmp/lib.so
相關問題