2013-06-03 28 views
0

我有一個C++函數doSth,將調用一個函數「checkFrame」從類「canMsg」如下所示C++運行符號查找錯誤,ubuntu的

#include "canMsg.h" 
void doSth(char* canFrame){ 
    map<int, double> returnedData; 
    CANMsg canMsg; 
    std::cout<<canFrame <<endl; 
    canMsg.checkFrame(canFrame); 
} 

在編譯期間我收到任何錯誤,但是當我運行它,它通過創建一個錯誤

undefined symbol: _ZNSaIcEC1Ev, version GLIBCXX_3.4 

任何想法如何解決這個執行std::cout<<canFrame <<endl;聲明和崩潰?

+3

'$ C++ filt <<<「_ZNSaIcEC1Ev」''std :: allocator :: allocator()' – BoBTFish

回答

0

當相關庫(其中_ZNSaIECEC1Ev ID已定義)爲其他版本的GLIBC(更新版本或更舊版本)編譯時,可能會出現此錯誤,您當前擁有該錯誤。

嘗試使用當前環境重新編譯該庫。

此外,你可以添加很好的開關到您的應用程序的LDFLAGS:-Wl, - no-undefined。然後你可以在編譯時看到任何未定義的符號(不知道它是否有助於你的情況)。

+0

檢查我的評論,該標誌是直接從標準庫。真的不想重新編譯自己。 – BoBTFish

+0

我的意思是,Dangila使用了''CANMsg'類實現的共享庫(例如libCANMsg.so)。也許這個庫已經被編譯爲不兼容的GLIBC版本。 – loentar

0

我認爲如果事情以'錯誤'的順序鏈接就會出現這種問題。我建議你嘗試改變你傳遞給鏈接器的任何庫的順序。

(我真的不知道爲什麼排序問題 - 但它有時做。)

0

感謝您的答覆。該錯誤是由於我嘗試返回一個本地聲明的指針。在我將局部指針變量改爲靜態後,它變得非常完美。基本思想是C++不主張將局部變量的地址返回給函數外部。

查看this瞭解更多信息。

+0

它應該導致段錯誤而不是符號查找錯誤。 – peterh

相關問題