【发布时间】:2021-12-28 02:31:00
【问题描述】:
一些std-lib、external-libs或任何其他预编译的src代码如众所周知的头文件如何<iostream> 及其对应的目标文件或static/dll库链接到我自己的应用程序自动?编译器是隐式地/在后台执行它还是像编译器预链表操作一样?
如果存在这样的案例我们如何使用它的功能在我们的协议中,有没有办法把我自己的obj、dll、static-lib 或 src 文件通过编写一些 理想列表 em>特殊语法 无需更改每个初始目录,也无需 IDE 配置和外部软件的帮助,目标是在终端显式删除链接阶段,想要在 src-code 中做这个配置。
是否每个 std-lib 都有执行此类操作的直接/内联特殊 src 代码?如果有,那么我们如何利用它?或者,如果一切都由编译器/处理程序完成,并且如果它是泛型类型,那么您可以修改它,但问题较少,但它是由编译器修复的,并且讨厌强行修改/分叉它。如果已经有一种方法可以在不显式修改的情况下执行此操作,那么仅在您的 onw src-code/write-time 执行此操作,如该块语句的第一行所述:“是否每个 std-lib /external-lib 有一个直接/内联的特殊 src-code 执行这种操作?”。
// a.cpp
#include<iostream>
// there's no linking on iostream obj, src, dll, static-lib file
// love to have this kind of special features to our own none-std-lib/etc.
>c/cpp-compiler -c a.cpp
>c/cpp-compiler -o a a.o
注意:我的一些术语是基于我自己的经验,所以要小心并保持开放的心态。因为随着我在编码社区的成长,使用术语/标准的交流方式是一团糟,专门从低到另一个低,从高到另一个高级编程语言。
【问题讨论】:
-
编译器有很多默认选项设置。与标准库的链接就是其中之一。
-
尝试运行
your-compiler -v -o a a.o。对于 gcc 和 clang,此输出的最后一部分将是它最终运行的实际低级链接命令。 -
@Barmar,是当前的编译器不能做到这一点,我想我有这个包含我自己的 self-proclaim-std-lib/src 的打包文件( zip/jar/etc...)将其设置为编译器中的参数,例如
-std=c++*,但以这种方式-std-pkg=self-proclaim-std.zip添加或更改std-lib。或者#include"mylib.h" @link(path/to/mylib.so)。甚至可以在写入时完成的编程语法。 -
GCC 编译器就像binutils 开源一样。您可以研究它的源代码并改进它。这将需要多年的工作。你可以开发你的GCC plugin。另请参阅DECODER 项目
-
我不知道您所说的“写入时间”是什么意思。标准库没有链接到目标文件中。它链接到可执行文件中。如果您使用的是 GCC,您可以提供自定义规范文件;我很确定规范文件定义了自动链接库的名称和文件路径。在其他编译器中存在相同的工具,但形式完全不同。但为了避免一些
-l选项,要做的工作量很大。
标签: c++ linker compiler-construction