如何使用 G++/LD 将库链接到共享对象

Posted

技术标签:

【中文标题】如何使用 G++/LD 将库链接到共享对象【英文标题】:How to link library into shared object with G++/LD 【发布时间】:2021-12-31 22:58:22 【问题描述】:

我正在开发一个 C++ 项目,该项目将被编译成一个共享对象文件。它需要访问 python 解释器,这是我遇到的障碍:链接后,我收到/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginT.o: relocation R_X86_64_32 against hidden symbol '__TMC_END__' can not be used when making a shared object__TMC_END__ 的开头引用是一个反引号,但这破坏了格式,所以我更改了它,如果这是有用的信息)。

显而易见的解决方案是下载 Python 源代码并将其与我的代码一起编译,但我不想让我的开发工作流程复杂到这一点,因此,我的问题是:如何将 Python 解释器嵌入到我的共享对象中文件?

我在 Ubuntu 20.04 上安装了完整的 Python 3.9,并且可以访问所有开​​发文件。

(如果这是错误的网站,我深表歉意)

【问题讨论】:

【参考方案1】:

看来我的问题是通过将 python 库添加到 g++ shared-object-builder 命令来解决的。我之前只将它添加到编译的第一阶段(转换为目标文件)。

【讨论】:

以上是关于如何使用 G++/LD 将库链接到共享对象的主要内容,如果未能解决你的问题,请参考以下文章

是否在编译时和运行时都调用了ld?

如何把文件加入linux系统中

如何将 C++ 目标文件与 ld 链接

如何使用 Flash JavaScript 文件 (.jsfl) 将库中的对象添加到舞台?

如何将库路径添加到编译器

g++ 尝试(失败)静态链接到 libstdc++ 以获取共享对象