結合工作共享庫編譯時使用g ++一段cpp的程序-O0我發現我的二進制文件不包含空字符串符號(basic_string的): _S_empty_rep_storage 當我做編譯相同的程序與-O2我注意到,上述符號二進制內確實包含如下(在倉使用納米):如何符號在Linux
00000000006029a0 V _ZNSs4_Rep20_S_empty_rep_storageE @@ GLIBCXX_3.4
我的應用程序使用幾個。所以(動態庫),當我的應用程序加載時,我注意到幾個這些.so文件綁定如下(我設置LD_DEBUG =所有跑我的程序):
28596: binding file /home/bbazso/usr/local/lib/mydynamiclib.so [0] to /usr/lib64/libstdc++.so.6 [0]: normal symbol `_ZNSs4_Rep20_S_empty_rep_storageE' [GLIBCXX_3.4]
28596: binding file /home/bbazso/usr/local/lib/mydynamiclib.so [0] to /home/bbazso/workspace/mytestapplication [0]: normal symbol `_ZNSs4_Rep20_S_empty_rep_storageE' [GLIBCXX_3.4]
28596: binding file /home/bbazso/workspace/mytestapplication [0] to /usr/lib64/libstdc++.so.6 [0]: normal symbol `_ZNSs4_Rep20_S_empty_rep_storageE' [GLIBCXX_3.4]**
但我也注意到我的。所以一個唯一的結合如下:
28087: binding file /home/bbazso/usr/local/lib/anotherdynamiclib.so [0] to /usr/lib64/libstdc++.so.6 [0]: normal symbol `_ZNSs4_Rep20_S_empty_rep_storageE' [GLIBCXX_3.4]
,但從來沒有如上所示爲mydynamiclib.so綁定二進制文件(mytestapplication)。
所以我想知道這實際上是什麼意思?這是否意味着anotherdynamiclib.so將對應用程序的其餘部分使用不同的符號作爲空字符串?我想我真正要問的是在上面的例子中,符號綁定是如何工作的?
謝謝!