用于在c++中隐藏符号的LD脚本
LD script for symbol hidding in c++
我想使用GNU LD版本脚本来隐藏c++共享库中不需要的符号。假设我的头文件是这样的:
int a();
int a(int);
class B {
B(){}
~B(){}
int x(int);
};
std::ostream& operator<< (std::ostream& out, const B& b );
我想隐藏头文件中没有说明的所有内容。
这个版本脚本看起来像什么?
类似这样的代码应该可以达到这个效果:
{
global:
extern "C++" {
"a()";
"a(int)";
B::*;
"operator<<(std::ostream&, B const&)";
};
local:
*;
};
如果您将此文件保存为foo.map
,则将-Wl,--version-script,foo.map
作为参数传递给链接器。语法的快速概要:
由于我们没有在脚本的顶层指定版本标签,库中的符号不会附加版本:脚本的效果只是选择哪些符号是可见的。
与
global
部分匹配的所有内容将可见,而与local
部分匹配的所有内容(在本例中,glob*
)将被隐藏。extern "C++" { ... };
块表示链接器在尝试匹配所包含的模式之前应该根据c++ ABI要求符号。带引号的模式直接匹配,未加引号的模式作为全局模式处理。
更多版本脚本文件格式的详细信息可以在这里找到:https://sourceware.org/binutils/docs/ld/VERSION.html
相关文章:
- 如何通过cpp程序运行shell脚本
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 在程序中编写脚本来编写和编译代码
- 如何在c++中使用system()来运行包含空格的python脚本
- 在cygwin中运行c++脚本时发生错误
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 在原子中使用犰狳与脚本
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- /usr/bin/ld: cannot find -lc++
- 解决"ld: library not found for -ltensorflow_framework.2.3.0"
- 编译 Boost 时在 OS X 上的"ld:未知选项:-soname"
- 使 ld 忽略来自 /etc/ld.so.conf 的目录
- 我适合在我的构建系统中使用 shell 脚本而不是AX_CHECK_COMPILE_FLAG吗?
- CANoe - 无法在 CAPL 脚本中打开.dll
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 需要避免在需要使用链接器脚本 *.ld 文件的静态库中对"WinMain"进行未定义的引用
- 用于在c++中隐藏符号的LD脚本