gpt4 book ai didi

c++ - 如果我在库和应用程序中编译了相同的 cpp 文件会怎样?

转载 作者:行者123 更新时间:2023-11-30 03:15:47 25 4
gpt4 key购买 nike

有点理论性的问题(而不是具体的例子)我以为我已经理解了这一点,但现在我又疑惑了......

场景:

  1. 我们有一个名为 bob 的通用类及其仅 header 实现。

  2. 我们有一个使用 bob 的库 (lib1)(这样 bob 在编译库中定义)。

  3. 我们还有一个使用 bob 的应用程序 (exe1)(这样 bob 就定义在已编译的可执行文件中)。

现在 lib1exe1 中都有 (afaik) bob 的定义。如果我尝试将 lib1 链接到 exe1 会发生什么……这可能吗?

如果我将类 bob 制作成一对 .cpp 和 .hpp 文件并在库和可执行文件中编译 cpp 文件,是否有任何区别 - 或者这基本上是同一件事?

我的问题实际上与两个二进制文件中的定义有关,链接器对这一切到底做了什么? (代码很简单)。我的理解是,这应该总是导致重新定义 bob 错误,但我似乎没有看到这一点。

可能意味着我做错了什么 - 所以我想和你们确认一下我的看法是否正确?

最佳答案

Now there is (afaik) a definition of bob in both lib1 and exe1. What happens if I try to link lib1 into exe1... is that possible?

链接器将使用 exe 中的 bob 定义并忽略 lib1 中的定义(无论库是静态的还是动态的)。这是因为链接器仅在库中搜索未解析 符号。

但是,如果您尝试链接 2 个都包含 bob 定义的目标文件,则会出现多个符号定义错误,因为链接器会提取目标文件的全部内容(与库不同)。

以上仅适用于具有外部链接的非内联符号。

关于c++ - 如果我在库和应用程序中编译了相同的 cpp 文件会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com