gpt4 book ai didi

c++ - 检测共享库中变量的重复定义

转载 作者:行者123 更新时间:2023-11-28 03:53:29 25 4
gpt4 key购买 nike

看来 GCC 链接器并不关心在两个文件中定义的一个变量。我怀疑这是第 3 方库给我们带来麻烦的原因。

拿这个:

文件 a.cpp 包含:

 int foo;
//do things with it.

文件 b.cpp 包含:

 int foo;
//do other things with it.

文件 c.cpp 包含:

 extern int foo;
//do other things with it.

它们都是由gcc 编译成.o 文件,然后链接为共享对象。

 gcc -fPIC -c a.cpp
gcc -fPIC -c b.cpp
gcc -fPIC -c c.cpp
ld *.o -shared -soname,mylib -o mylib

链接器根本没有提示,但生成的二进制文件却行为不端。我们怀疑至少存在一些此类冲突,并希望找到它们。什么样的链接器选项可以让我们检测到它们?

(有趣的是,如果变量在两个文件中都被初始化(int foo=0),则会产生错误)。

最佳答案

现在稍等——您在两个文件中将 foo 用于两个不同的目的吗?那肯定会导致运行时错误。如果 foo 需要是全局的,那么它应该只在一个模块中定义——链接器可能会接受它,但您仍然只会得到 foo 的一个拷贝。如果它不需要是全局的,它应该被声明为 'static int foo;'

关于c++ - 检测共享库中变量的重复定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4545868/

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