我有一个库,我想为不同的CPU代(所有x86)编译,比如说我想要一个人使用Skylake提供的所有指令,Haswell的后备版本,Sandy Bridge的后备版本等等。上。我知道我可以使用-march=xyz
来实现这一点,但是,我也希望能够轻松使用该库。理想情况下,用户只需链接一个存根库,然后存根库就可以在为目标CPU优化的正确库中动态加载。我知道我可以通过在加载器库中导出函数指针然后正确填充来实现这一点,但是,由于我无法导出类方法,所以它本身并不适合C ++应用程序。
有没有办法强制动态链接器重新进行重定位?理想情况下,加载器库将提供在库支持的所有CPU上运行的代码的最大后备版本,但是可以加载更专业的版本,或者它实际上只是在运行时被替换的存根库。无论哪种方式,理想情况下我想做到这一点,以便用户只需要链接到一个动态库,其余的在运行时自动发生。
理想情况下,我想要一个适用于Linux和OS X的答案,但我也选择一个仅适用于其中一个的答案。