2013-08-21 35 views
1

在Linux上鍊接的可執行文件,我得到一個「未定義的引用」的錯誤是這樣的:如何強制從特定庫中鏈接符號?

undefined reference to `[email protected]_1.0' 

我沒有「SOMELIB」的控制,但我有符號symbol在一個我自己的共享庫。我絕對相信[email protected]_1.0與我庫中的符號相同(提供的功能完全相同),實際上甚至源代碼也幾乎相同。

如何強制/別名[email protected]_1.0從我的庫鏈接,而不是從SOMELIB_1.0? 我在考慮鏈接器腳本中的某種符號版本控制技巧,但我找不到任何解決方案或線索。

在此先感謝。

回答

1

loooong戰鬥(和搜索)後,我找到了解決方案here。總結:我需要兩個符號。在我的源代碼,我把這樣的事情:

__asm__(".symver symbol1, [email protected]_1.0"); 
void symbol1(void) 
{ 
..... 
} 

__asm__(".symver symbol2, [email protected]_1.0"); 
void symbol2(void) 
{ 
..... 
} 

然後我需要一個類似器腳本mylib.map包含:

SOMELIB_1.0 { 
    symbol1; 
    symbol2; 
}; 

要連結「mylib.so」我需要通過額外的參數:-Wl,--version-script=mylib.map

相關問題