我有以下问题需要处理:
有没有办法实现这个目标?
如果重要,编译器为VC++ 2012
。
修改:
答案 0 :(得分:1)
编译静态lib及其应该用于DLL的接口的实现。
需要注意的事项:
答案 1 :(得分:1)
这可能无法直接实现。根据定义,静态库不进行链接,而只是为可执行二进制文件提供构建块,因此没有必要公开仅由静态库使用的符号。静态库只是不“消耗”符号 - 只有二进制文件(经过链接)才会这样做。
但是,如果您将自己构建为obj文件并将其与静态库一起重新打包,那么您可以大大减少使用自定义库回调的人的机会。 LIB can do that.没有其他人可以访问您的自定义回调的源 - 或标题 - 但是如果有人攻击它的确切符号名称(我认为你正在尝试的话),实现仍将从lib导出来自。)
答案 2 :(得分:0)
我无法找到任何关于不使用Windows链接器导出某些符号的文档,尽管我认为这个功能似乎存在于gnu链接器中。
你可以尝试的一件事是让你的新函数/操作符使用,因此依赖于另一个函数,比如MyFunction,在另一个.lib中。该.lib只包含MyFunction,它的唯一目的是提供这种依赖,这样你就可以成功链接你的二进制文件。如果没有这个新的.lib,使用新功能的任何人都无法成功链接。据推测,控制你的核心库的另一个.lib会更容易。
除了你不希望优化器消除对它的调用之外,你会希望MyFunction基本上是一个noop。此外,您可以让您的函数/运算符使用包含在另一个.lib中的数据项(而不是进行函数调用),再次使用相同的优化器警告。