macos - 我如何告诉链接器使用方法的多个实现中的哪一个?

标签 macos linker clang

我使用一个工具生成了一个 111k 行长的 C++ 类实现。它生成的方法可以正常工作,但它们往往会在它们使用的 API 中触发缓慢的路径。

有没有什么办法,在 Mac OS X 上使用 Clang,我可以在不同的源文件中手动实现一些最常用的方法,并告诉链接器(或任何其他相关程序)忽略工具生成的方法是否存在该方法的另一个实现?

我可以完全控制该工具的输出,尽管很难自动生成更好的代码。

最佳答案

如果代码在库中交付,则链接器会搜索连续库中的 .o 文件,直到满足所有未解析的符号为止。因此,如果您的代码生成可以确保将弱代码分离到不同的 .cpp 文件中,那么您可以在链接路径上的较早的 .a 中交付自定义编写的版本,该版本将在代码生成提供的 .a 之前使用。

或者,如果您可以在代码中添加一个错误的模板,那么您可以为代码指定一个明确的特化。这将由编译器/链接器使用,因为它是一个特定的特化。

关于macos - 我如何告诉链接器使用方法的多个实现中的哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632838/

相关文章:

css - Mac 上的字体看起来很奇怪

java - 如何从macOS Catalina build 10.15.4运行Java?

c++ - clang 3.8 - 如何阻止 clang 创建系统 header 的 AST?

c++ - clang++: 标准头文件中的错误

c++ - 3D vector 索引不一致 C++

android - Mac Eclipse 不解析 NDK 中的 C++ lib 函数

iphone - 链接器错误: iPhone Unit Test Bundle referencing App classes

c++ - vulkan vkresult 链接器错误 msvc

linker - LLVM 将 pthread 函数调用插入 IR

c - OS X 中的 fp->_IO_write_base 和 fp->_IO_write_end