我正在尝试制作一个静态库,其中库的某些方面可以在外部定义(在已编译的库代码之外)。
对于函数定义,我可以在库中使用 extern void foo() 声明
毫无问题地编译库,然后在引用静态库的代码。
我还想制作一些静态库中的#define values
和typedef structs
,可以在外部进行编辑。
如果我删除了#defines 或typedef 结构声明
,那么我将无法编译库。
所有使用 extern 的尝试也都失败了。
这可能吗?如果是这样,我该怎么做?
问候, 约翰。
最佳答案
#define
是在编译时处理的,因此您不能在(已编译的)库之外使它们可编辑。
typedef
和 struct
定义内存布局和这些数据类型的偏移量。这些在编译时处理以在编译代码中插入正确的偏移量以访问成员,因此也在编译时处理并且不能在(编译的)库之外编辑。
您可以将库函数 void *
指针传递给您的数据结构,并传递库函数来处理这些外部定义的数据类型。例如:
void genericSort(void *ArrayToSort, int (*cmp)(void *, void *));
在这里,您向库函数传递一个要排序的数组和一个比较两个元素的函数,而库对这个数组包含的内容一无所知。
关于c++ - 具有 extern #define 和 typedef 结构的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35286901/