一個簡單的問題 - 有什麼辦法可以使g++
鏈接器與特定的libstdc++
庫版本鏈接?我在gcc
/g++
的手冊頁中找不到任何有用的東西,在這裏沒有其他問題。如何鏈接特定庫(g ++; libstdC++。so.5和libstdC++。so.6)
以下是情況 - 我的應用程序使用特定的共享庫,它使用libstdc++.so.5
構建,我想要在RHEL5
上安裝和使用它。所以,當我嘗試建立一個RHEL5
機上的應用,我得到了警告:
warning: libstdc++.so.5, needed by ..the_shared_library_.. may conflict with libstdc++.so.6
安裝,因爲無能的compat-libstdc++
轉速沒有幫助,對std::string
析構函數的程序崩潰, 。所以,這RHEL5
機器上我有這樣的:
[[email protected]]# ll /usr/lib/libstd*
-rwxr-xr-x 1 root root 259532 Aug 21 2006 /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 31 Jul 28 19:35 /usr/lib/libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 18 Aug 24 15:08 /usr/lib/libstdc++.so.5 -> libstdc++.so.5.0.7
-rwxr-xr-x 1 root root 733456 Aug 21 2006 /usr/lib/libstdc++.so.5.0.7
,當我做
[[email protected]]# ldd my_exe
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00333000)
...
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00ddf000)
這是不好的,因爲我知道這是未定義的行爲:/
那麼,有沒有什麼辦法僅使用libstdc++.so.5
構建我的可執行文件? (刪除libstdc++.so.6
不是一個選項,因爲很多原因,靜態鏈接也不是一個選項)。
非常感謝!
好吧,我嘗試了第一個選項,仍然沒有。我仍然在那裏等待幫助,所以我不認爲他們會重新編譯庫。 關於第二個 - 我需要在RHEL5機器上使用該應用程序,所以我不需要較舊的操作系統庫,只需要libstdC++。如果他們告訴我他們用於編譯oracle庫(OCCI 10.2.0.3)的gcc版本,我將使用RHEL5和特定的gcc版本創建虛擬機。希望這會有所幫助:/ 感謝您的迴應! BR, Kiril – 2010-08-31 11:43:28
對不起,沒有幫助: - /在一個捏你可以運行一個單獨的進程爲libstdC++。so.5代碼,並使用IPC之間傳遞數據。甚至可以用舊GCC編寫一個C封裝器庫,並將它鏈接到你的新代碼中,這樣兩者之間就沒有C++邊界了,但你必須非常小心庫鏈接順序。 – Rup 2010-08-31 12:01:08
啊,是的,這真是個好主意!不幸的是,我沒有時間來解決這個問題,但這對其他應用程序非常有用。非常有趣的想法。謝謝! – 2010-08-31 12:11:44