Necesito llamar a una función de otro programa. Si el otro programa fuera una biblioteca, simplemente podría usar dlopen y dlsym para obtener un control de la función. Desafortunadamente, el otro programa es un ejecutable de Unix, y construirlo como una biblioteca no es una opción. Tratando dlopen() en el ejecutable da este mensaje de error:Usando dlopen() en un archivo ejecutable
dlopen([...]/testprogram, 1): no suitable image found. Did find: [...]/testprogram: can't map
Esto no es sorprendente, ya que dlopen está destinado para su uso con las bibliotecas, no ejecutables. ¿Hay alguna manera de hacer que dlopen y dlsym trabajen con ejecutables? Si no, ¿hay una forma alternativa de lograr lo mismo?
Como se discutió aquí: http://stackoverflow.com/questions/6617099/call-function-in-unrelated-executable-linux/6619977#6619977, esta respuesta es incorrecta para los ejecutables de PIE, que son realmente una forma especial de bibliotecas compartidas (e incluso tienen ET_DYN e_type). –