【问题标题】:Is it possible to specify linker options from code?是否可以从代码中指定链接器选项?
【发布时间】:2016-11-12 01:21:30
【问题描述】:

我想知道是否可以从代码中指定链接器选项?编译器允许#pragma 指令抑制警告;我们可以将其扩展多远?

【问题讨论】:

  • 简而言之,“不”。
  • 你为什么问这个问题?编辑你的问题来激发它并提供更多细节。听起来像XY problem

标签: c linker clang


【解决方案1】:

(我正在考虑在 Linux 系统上隐式链接并使用 GCC 编译器;您可能可以根据您的操作系统调整答案)

不,不可能在代码中指定链接选项,并注意链接器正在处理目标文件(而不是其中的单个函数)。

但是,您的build procedure 可以从源代码中提取链接器选项。例如,如果您有一个包含许多单源程序的目录(即,aa.cc C++ 源文件编译成 aa.bin 可执行文件,bb.cc 编译成 bb.bin 等)你可能有一个 Makefile 提及

%.bin: %.cc
       $(CXX) $(CXXFLAGS) $(shell awk /Link:/{print $2} $<) $^ -o $@

并在aa.cc 中发表如下评论:

/* the link option is
   Link: -lfoo
 */

顺便说一句,您可能还有一些GCC plugin,其中registers 并处理您特定的#pragma;如果你使用clang 而不是gcc 你也可以有一些Clang plugin;新的 pragma 可以在公共 Sqlite 数据库中添加一些东西,稍后在链接时使用。

所以你可以做一些复杂的事情,但我只是建议你有自己的make rules 来处理你的链接。

【讨论】:

  • 感谢您的帮助,XY问题是有道理的。我在想是否有可能实现一个基于宏生成不同程序入口点的测试框架,因为不可能,我会用脚本来做:)
  • 不要忘记可以使用元编程技术;您可能有一些脚本生成 C 或 C++ 代码、测试用例、编译或链接命令。
猜你喜欢
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 2020-03-16
  • 2020-12-02
  • 2017-04-29
  • 1970-01-01
  • 2011-02-20
  • 1970-01-01
相关资源
最近更新 更多