22得票2回答
有没有一种方法可以确定 .a 或 .so 库是否已编译为位置无关代码?

在编译Numpy库时,我遇到了与Lapack链接的错误,提示我需要使用-fPIC编译Lapack。我认为我已经这样做了。有没有办法确定生成的Lapack库是否是位置无关的?

16得票5回答
共享库和.h文件

我对程序如何使用共享库有一些疑问。 当我构建一个共享库(使用-shared -fPIC开关)时,我会使一些函数可以从外部程序中调用。 通常我会使用dlopen()加载库,然后使用dlsym()将这些函数链接到我的程序中的某些函数指针上。 这种方法不涉及包含任何.h文件。 是否有一种方法可以避...

14得票2回答
全局变量、共享库和-fPIC的影响

我编写了一段代码,包括一个动态链接库 (lib.c) 和一个主执行文件 (main.c)。 在这两个文件中,我定义了一个名为 int global 的全局变量。 虽然不太明智,但那不是问题所在。 当我编译动态链接库时,-fPIC 选项似乎是必须的:gcc lib.c -fPIC -share...

12得票1回答
如果使用gcc -fPIC标志编译对象并在可执行文件中使用,会有什么影响(如果有的话)?

我正在为一个项目编写makefile。这个项目中包含可执行文件和共享库。两者都使用一些相同的源文件,这些文件会被分别编译成对象文件。为了能够在共享库中使用这些对象,我需要在gcc中使用-fPIC(位置独立代码)标志。使用-fPIC编译对象文件后是否有任何影响,可以用于可执行文件?

11得票2回答
在Cortex-M3上尝试加载位置无关代码

我有一个嵌入式应用程序,其中将有一个引导加载程序,该引导加载程序将决定从内部闪存直接运行两个应用程序中的一个。 我正在尝试使这些应用程序具有位置无关性,以便它们可以编译到相同的基地址。 没有操作系统,因此没有可用的动态链接器。 到目前为止,我已经尝试使用-fpie选项(使用gcc)构建,但并不...

9得票1回答
gcc与clang:使用-fPIC内联函数

考虑以下代码: // foo.cxx int last; int next() { return ++last; } int index(int scale) { return next() << scale; } 当使用gcc 7.2进行编译时: $ g++ ...

8得票1回答
生成常量数据的%pc相对地址

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

8得票1回答
PIC(位置无关代码)

有没有办法检查一个目标文件(.o 文件)是否启用了 PIC?

7得票1回答
为什么我不能使用-fPIE编译,但可以使用-fPIC?

我有一个有趣的编译问题。 首先,请查看要编译的代码。 $ ls Makefile main.c sub.c sub.h $ gcc -v ... gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ## Makefile %.o: CF...

7得票1回答
如何确定共享库二进制文件是否使用了-fPIC选项进行编译

我正在处理嵌入式Linux环境。我有一组以二进制格式提供的共享库(我没有源代码和Makefile),我想检查它们是否已经使用-fPIC选项进行编译。是否有任何工具或方法可以测试共享库二进制文件是否已经使用了-fPIC编译? 谢谢。