2011-04-07 50 views
2

我使用dlopen加載我的程序中的pthread庫,並使用dlsym將處理程序提取到pthread_createpthread_join符號版本控制和dlsym

如何確保這兩個處理程序是兼容版本?我不在乎這些符號是新版本還是舊版本。我只是希望不管pthread_create我用什麼來配合我所得到的pthread_join

我知道有一個dlvsym我可以傳遞明確的版本號,但我不關心確切版本號,因爲我希望我的代碼獨立於庫版本。

+3

我相信你可以安全地承擔起*同*庫提供的將是兼容的是在pthread_create和pthread_join函數。 – Erik 2011-04-07 21:25:21

+0

問題是將dlsym返回兼容的符號。我不是在命令行連接庫,而是使用dlopen和dlsym來獲取處理程序。 – Saurabh 2011-04-08 06:37:18

+0

在這之後,我想知道 - 我不明白如何使用'dlopen'而不是將它留給傳統的隱式動態鏈接,這與Erik的評論的有效性有關 - 如果你使用'dlopen'來獲得一個你選擇的庫的句柄,放心'_join'和'_create'幾乎可以保證彼此協同工作,因爲它們是從源代碼構建的同一個動態庫對象的一部分。被設計爲彼此合作? – amn 2016-07-07 19:17:15

回答

1

版本存在的唯一原因是對ABI兼容性差的嘗試,它與針對古代編譯的程序兼容,而這些版本的glibc實際上無法工作。 (他們至少默默地破壞了ABI一次,據我所知,這種方式無法兼容。)請忽略它。

0

聽起來像你需要「dladdr - 找到包含給定地址的共享對象」。

但是,由於您尚未說明您正在使用的平臺,因此可能無法使用。

看一看,看看..

+0

任何人都可以幫助我如何通過dlvsym中的「版本」 – Saurabh 2011-04-08 07:09:18