c我用它来生成x.so共享库 在x.c中我想使用主模块中的几个函数,(包含主文件和exe的dir),一种递归依赖。 有没有办法做到这一点(没有在x.c中复制这些功能)? 我读到了关于-rdynamic,但无法完全了解它。 当我编译我得到'somefunc'未宣布。 (somefunc在主模块中,我在x.c中做了extern somefunx但是没有工作) 请告诉我 感谢
答案 0 :(得分:2)
您可以在共享库中定义受影响的方法以获取回调函数指针参数,然后在调用时将主模块的函数作为参数传递。 E.g。
// Library
void dosomething (int arg, void (*callback)(void)) { ... }
// Main module
void called_from_lib(void) { ... }
dosomething(10, called_from_lib);
答案 1 :(得分:0)
这看起来像unix。有一个函数dlopen(),它允许您动态调用库中的函数 - 无需在编译时引用它,也无需将其链接到程序中。 dlopen()是POSIX,因此应该在任何现代的unix框中。
此处示例:
http://www.dwheeler.com/program-library/Program-Library-HOWTO/x172.html
还有LD_LIBRARY_PATH。此环境变量允许您使用相同的代码,但允许您替换编译时不存在的库。这不完全是你所要求的,但可以使用adhoc共享库来做一些事情,而不需要使用dlopen。像HPUX这样的系统也支持SHLIB_PATH,它可以做同样的事情。