how to call function in executable from my library?

試著忘記壹切 提交于 2019-11-26 22:58:16
ninjalj

In Linux/ELF you can pass the -export-dynamic option to the linker (-rdynamic on the compiler driver gcc) so symbols from the executable are exported to shared objects.

You'd have a dummy print implementation in your library, which would be shadowed by the implementation on your executable, since the executable is usually searched before shared objects for symbol resolution.

This has the disadvantage that it's not very fine-grained, you could end up overriding some symbol you didn't intend to. The finer-grained option would be to create a list of symbols to be exported as:

{
    print;
    <other symbols>
};

and pass that list to the linker, e.g. from gcc: -Wl,--dynamic-list=<file with list of symbols>

An easier way to achieve this is to have the executable register a function for later use by the library, the library stores a pointer to the function, and may call it at a later time.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!