2011-07-27 86 views
0

我在代碼中使用函數regcomp()。我的代碼鏈接libonig.so以及libc.so.6。 這兩個庫都有自己的regcomp()實現,但是我想使用libonig.so中的實現。但是,我的代碼總是使用libc.so.6中的實現。 LDD的輸出如下 -鏈接錯誤 - 不同共享庫中的相同符號

LDD libtest.so

linux-vdso.so.1 => (0x00007fffa03ff000) 
    libonig.so.2 => /usr/local/lib/libonig.so.2 (0x00007f5cb2fbf000) 
    libstdc++.so.6 => /usr/local/lib64/libstdc++.so.6 (0x00007f12a43cf000) 
    libm.so.6 => /lib64/libm.so.6 (0x00007f12a414c000) 
    libgcc_s.so.1 => /usr/local/lib64/libgcc_s.so.1 (0x00007f12a3f36000) 
    libc.so.6 => /lib64/libc.so.6 (0x00007f12a3be1000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003421c00000) 

我不允許修改任何libonig.so或libc.so.6的的。有沒有一種方法可以指定鏈接器從libonig.so中使用regcomp()?

回答

0

剛剛解決了這個問題。我實際上是使用dlopen()來加載共享對象(libtest.so)。所以我應該將libonig.so鏈接到加載libtest.so的二進制文件。

另一方面,我試圖將libonig.so鏈接到libtest.so。但是,當二進制文件運行時,它從libc.so.6獲得它的regcomp()版本,並且認爲不需要使用libonig.so來解析該符號。鏈接libonig.so並在LD_LIBRARY_PATH中包含其路徑解決了該問題。