【发布时间】:2014-09-10 01:41:40
【问题描述】:
我有一个使用两个 libraries libA 和 libB 的 C 程序。问题是;这两个库都有 list_delete 函数,这是一个编译器错误。通过编写这些行,我能够成功编译和链接我的代码。
#undef list_delete
#define list_delete mysql_list_delete
在此之后,我可以在我的代码中调用 libA 的 list_delete 函数。但是,当我调用 libB 的任何函数(list_delete 除外)时,该函数在内部调用 list_delete 函数,而该函数恰好是 libA 的 list_delete 函数。
为什么? libB 应该在内部调用 list_delete 函数而不是 libA 的 list_function。
问题是我如何告诉 libB 库使用它自己的 list_delete 函数(请记住我的程序正在使用 libA 的 list_delete 函数)
【问题讨论】:
-
您的库是静态的还是动态的(.dll、.so、.dylib)?一种方法是将 libB 的
list_delete声明为static。这将要求使用它的函数在同一个编译单元中,因为它的符号没有被导出。 -
图书馆就是这样。我无法控制库,因为这些是第三方库