我需要從另一個程序中調用一個函數。如果其他程序是一個庫,我可以簡單地使用dlopen和dlsym來獲取該函數的句柄。不幸的是,另一個程序是一個Unix可執行文件,並且將它作爲一個庫進行構建並不是一種選擇。對可執行文件試圖執行dlopen()給出了這樣的錯誤消息:在可執行文件上使用dlopen()
dlopen([...]/testprogram, 1): no suitable image found. Did find: [...]/testprogram: can't map
這並不奇怪,因爲dlopen的意思爲使用庫,而不是可執行文件。有沒有辦法讓dlopen和dlsym與可執行文件一起工作?如果沒有,是否有另一種實現同樣目標的途徑?
正如在這裏討論的:http://stackoverflow.com/questions/6617099/call-function-in-unrelated-executable-linux/6619977#6619977,這個答案是錯誤的PIE可執行文件,這真的是一種特殊的形式共享庫(甚至有ET_DYN e_type)。 –