gcc - 想要很好地理解内存级别的共享库

标签 gcc dll shared-libraries static-libraries

请有人帮忙。 我正在创建一个共享库,当使用此命令运行时,会出现错误 “gcc -共享 libx.o -o libx.so”

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: libx.o: 针对 `.rodata 重定位 R_X86_64_32 ' 创建共享对象时不能使用; 使用 -fPIC 重新编译 libx.o:无法读取符号:错误值

collect2: ld 返回 1 退出状态

因此,我使用 -FPIC 运行它,它可以编译,请您让我很好地理解 -FPIC 在内存级别的意义,我的意思是它如何在使用此共享库的两个程序之间在物理内存中共享。

非常感谢。

最佳答案

-fpic 代表位置无关代码。

您可以阅读 drepper 以获取有关动态链接的更多信息 http://www.akkadia.org/drepper/dsohowto.pdf

似乎是类似帖子的重复GCC -fPIC option

关于gcc - 想要很好地理解内存级别的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9237547/

相关文章:

windows - 了解对 dll 文件的注册表数据引用的负偏移量

linux - LD_LIBRARY_PATH 不适用于多个路径

通过 macOS 终端编译, fatal error : stdio. h: No such file or directory

在没有无关信息的情况下编译

visual-studio - 更新 DLL 引用

windows - NT DLL 加载器是否按照可执行文件导入部分的顺序加载 DLL?

linux - 链接到共享库 Linux

c - "Warning: Linking the shared library against static library is not portable"是什么意思?

c++ - supc++ 的链接顺序真的很重要吗?

python - 依赖于 gcc 的 pyzmq 安装错误