【发布时间】:2016-01-14 15:37:31
【问题描述】:
我正在编写一个提供 sha256 实现的库。该库将提供给可能希望提供针对其平台优化的自己的 sha256 函数的供应商。因此,这个库的 API 允许客户端将函数指针传递给他们的 sha256 代码。
int mylib_set_sha256_impl( /* function pointers */ );
今后,所有算法都将使用内部提供的函数指针,而不是库提供的库存 sha256 代码。
问题是:如何在链接期间促进死代码删除,从而删除此库中的默认 sha256 实现?
这是一个 API 设计问题,同时也是一个编译器优化问题。
【问题讨论】:
-
也许看看weak aliasing。
-
弱别名是主要编译器供应商(即 MSVC、gcc、clang、Intel C...)支持的东西
-
肯定是 GCC,其他的可能也是。
-
我会对此进行调查。感谢您的提示。
-
如果用户提供的函数指针将在运行时解析(通过调用 API),我认为链接器不太可能省略默认实现。