问题标签 [fpic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
30476 浏览

makefile - 使用 -fPIC 选项重新编译,但该选项已在 makefile 中

制作时出现此错误:

它说我应该使用该-fPIC选项重新编译。我这样做了,将-fPIC选项添加到CFLAGSand CXXFLAGS,但我仍然得到同样的错误。有没有办法解决这个问题?我已经看到这个问题与使用64位机器有关,而且我使用的是一个。

0 投票
3 回答
66368 浏览

c++ - 构建共享库时 -fPIC 是什么意思?

我知道 ' -fPIC' 选项与解析地址和各个模块之间的独立性有关,但我不确定它的真正含义。你可以解释吗?

0 投票
1 回答
2101 浏览

gcc - 如果在可执行文件中使用带有 gcc -fPIC 标志的对象,编译对象的含义是什么(如果有的话)?

我正在为我正在处理的项目整理一个生成文件。我在项目中有一个可执行文件和一个共享库。两者都使用一些相同的源文件,这些文件分别编译成目标文件。为了能够在共享库中使用这些对象,我需要在 gcc 中使用 -fPIC(位置无关代码)标志。使用 -fPIC 编译在可执行文件中使用的对象是否有任何影响?

0 投票
5 回答
23172 浏览

c++ - 共享库和 .h 文件

我对程序如何使用共享库有一些疑问。

当我构建一个共享库(使用 -shared -fPIC 开关)时,我会从外部程序中提供一些功能。通常我会做一个 dlopen() 来加载库,然后 dlsym() 将上述函数链接到一些函数指针。此方法不涉及包含任何 .h 文件。有没有办法避免做 dlopen() & dlsym() 并且只包括共享库的 .h ?

这可能是 c++ 程序如何使用存储在系统共享库中的代码。即只包括stdlib.h等。

0 投票
6 回答
34592 浏览

gcc - 我如何使用 objdump 之类的东西来判断是否使用 -fPIC 构建了目标文件?

我怎样才能知道objdump,如果一个目标文件是用 构建的-fPIC

0 投票
3 回答
19135 浏览

c - 将共享库与静态库链接:静态库的编译方式必须与应用程序链接它的方式不同吗?

至少在 Linux 和 Solaris 上,静态库实际上只是一堆已编译的 .o 文件,它们被扔进一个大文件中。编译静态库时,通常会省略 -fpic 标志,因此生成的代码是位置相关的。

现在说我的静态库是 B。我已经构建了它并得到了生成的 .a 文件,它实际上只是所有与位置相关的 .o 文件的全局。现在我有一个我想构建的共享库A,我希望它静态链接B。当我构建A时,我自然会使用-fpic标志来使生成的代码位置独立。但是如果我链接到 B,我不是混合了位置相关和位置无关的目标文件吗?

除非我还指定 -mimpure-text,否则我会收到很多文本重定位错误,我认为这可能是原因。看来我编译一个库的时候,真的需要编译3次,一个共享版本,一个静态版本,一个static-that-c​​an-be-used-by-shared-libs版本。我对吗?我可以继续使用 -mimpure-text 但 g++ 手册页说,如果你这样做,对象实际上并没有最终被共享(不清楚它是全部未共享还是只是静态链接的部分,有人知道吗?) .

0 投票
1 回答
2712 浏览

gcc - 生成常量数据的%pc相对地址

有没有办法让 gcc 生成%pc常量的相对地址?即使字符串出现在文本段中,arm-elf-gcc 也会生成一个指向数据的常量指针,通过%pc相对地址加载指针的地址,然后解除引用。由于各种原因,我需要跳过中间步骤。例如,这个简单的函数:

生成(使用 编译时arm-elf-gcc-4.3.2 -nostdlib -c -O3 -W -Wall logfile.c):

我原以为它会产生更像:

有问题的代码需要部分与位置无关,因为它将在加载时重新定位在内存中,而且还与未编译的代码集成-fPIC,因此没有全局偏移表。

我目前的工作是调用非内联函数(通过%pc相对地址完成)以类似于-fPIC代码工作方式的技术查找编译位置的偏移量:

但是这种技术需要手动修复所有filename()数据引用,因此上面示例中的函数将变为:

0 投票
2 回答
10133 浏览

gcc - 有没有办法确定 .a 或 .so 库已被编译为位置独立代码?

针对 lapack 编译 numpy 库时出现链接错误,表明我需要使用 -fPIC 编译 lapack。我以为我已经做到了。有没有办法确定生成的 lapack 库与位置无关?

0 投票
2 回答
35441 浏览

gcc - `-fpic` 和 `-fPIC` gcc 参数有什么区别?

我已经阅读了gcc手册页,但我仍然无法理解 和 之间的-fpic区别-fPIC。有人可以以非常简单明了的方式解释吗?


相关问题:

0 投票
2 回答
7836 浏览

position - 尝试在 cortex-m3 上加载与位置无关的代码

我有一个嵌入式应用程序,它有一个引导加载程序,它将决定直接从内部闪存运行两个应用程序中的一个。我正在尝试使这些应用程序位置独立,以便它们都可以针对相同的基地址进行编译。没有操作系统,所以没有动态链接器可用。到目前为止,我已经尝试使用 -fpie 选项(使用 gcc)进行构建,但没有取得太大的成功。函数调用似乎是正确的,但全局数据没有正确的地址。本地定义的全局数据的地址偏移量似乎是应用程序与其原始基地址的偏移量。在其他文件中声明的全局数据具有完全错误的地址(如果我使用 -fpic 构建,那么本地声明的全局数据和其他文件中的全局数据都是完全错误的)。