gpt4 book ai didi

c++ - Gcc 隐藏来自包含的静态库的符号的可见性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:26 28 4
gpt4 key购买 nike

我有:

  1. 一个共享库,比如 libShared.so,它包含一个类 Bar,带有一个方法 int Bar::do(int d) const
  2. 一个静态库,比如 libStatic.a,它包含一个类 Foo,带有一个方法 int Foo::act(int a) const

Bar 的代码是这样的:

//Bar.h
class __attribute__ ((visibility ("default"))) Bar
{
private:
__attribute__ ((visibility ("hidden"))) int privateMethod(int x) const;
public:
Bar() {}
int do(int d) const;
}

//Bar.cpp
#include "Bar.h"
#include "Foo.h"

int Bar::do(int d) const {
Foo foo;
int result = foo.act(d) + this->privateMethod(d);
return result;
}

libShared.so 使用标志 -fvisibility=hidden 编译。

问题如下:我执行 Linux 命令 nm -g -D -C --defined-only libShared.so,结果是 class Foo 及其方法在 libShared.so 外部可见,尽管已告知编译器隐藏除标记为“公共(public)” 之外的所有内容(事实上,它们被标记为nm 的“T”)。

我怎样才能避免这种情况?我希望 libShared.so 不公开来自其依赖项的符号。

谢谢

最佳答案

您还需要使用标志 -fvisibility=hidden 编译 libStatic.a

关于c++ - Gcc 隐藏来自包含的静态库的符号的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31670950/

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