问题标签 [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 投票
2 回答
2404 浏览

plugins - 需要不支持的动态重定位 R_ARM_REL32;使用 -fPIC 重新编译

我正在通过 yocto 1.6 构建一个 gst 插件。我有 32 位和 64 位的 linaro 4.9 交叉工具链。当我使用 64 位工具链构建插件时,它是成功的(我得到了插件 .so 文件),而如果我使用 32 位工具链构建相同的源,我得到了以下错误

这里是整个错误

我很困惑,为什么在链接命令中提到了 -fPIC 却无法重新编译构建?我在 Makefile 和 libtool 脚本的任何地方都手动尝试了 -fPIC 选项,但没有用:(

在不修改源文件和配方文件的情况下,它在 32 位工具链中成功,而在 64 位工具链中失败,并告诉使用 -fPIC 选项重新编译

以下是构建机器信息。

0 投票
0 回答
317 浏览

makefile - CGAL 演示未运行

我一直在努力让他们工作。在安装库(通过 tarball)并通过 cmake-gui 安装我发现需要的每个依赖项之后,我设法使示例和一些 2D 演示工作。

我可以运行三角剖分和多边形演示,但是当我尝试制作多面体演示时,它达到 13% 并引发以下错误:

我用谷歌搜索了类似的错误,但我似乎无法将任何答案复制到其中。我尝试在 CMakeLists.txt 上添加 -fPIC 标志,但错误仍然存​​在。

使用 cmake-gui (我必须让其他一切正常工作)我注意到只有 QGLViewer-debug 包丢失。我试图找到它无济于事,无法理解如何制作第二个包的副本以使一个成为调试版本,也无法理解如何将包的正常版本转换为调试版本。而且我也看不出这是否与错误本身有关。

作为附带说明,AABB 树示例 Seg Faults 在启动时,在 cmake/make 区域没有错误。

我不知道此时该怎么办。我真的需要看到在这台计算机上运行的 3D 演示,以确保我可以使用这个库。

0 投票
2 回答
393 浏览

c++ - 除了共享库之外,g++ -fPIC 是否也适用于可执行文件?

我理解 g++ -fPIC 选项很好地解释了:GCC -fPIC 选项 我有许多源文件,这些源文件是通过makefile构建来管理的。很难分离作为可执行文件或共享库一部分的源文件。我可以将 g++ 的 -fPIC 选项用于任何正在编译的文件:

稍后,如果它是共享库,则使用 链接-shared,否则不-shared使用可执行文件。

0 投票
1 回答
491 浏览

malloc - 我可以只构建 glibc malloc 作为共享库吗?

我想将 glibc malloc 构建为共享库,而不是作为 libc.so 的一部分

我没有使用任何 chroot,而是直接尝试构建它。

当我将 glibc 作为正常构建时,它输出用于构建 malloc 的命令,即:

gcc malloc.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wundef -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes -fPIC -DMORECORE_CLEARS=2 -I../include -I/home/sharath.g/glibc-2.20/build/malloc -I/home/sharath.g/glibc-2.20/build -I../sysdeps/unix/sysv/linux/x86_64/64 -I../sysdeps/unix/sysv/linux/x86_64 -I../sysdeps/unix/sysv/linux/x86 -I../sysdeps/unix/sysv/linux/wordsize-64 -I../sysdeps/x86_64/nptl -I../sysdeps/unix/sysv/linux -I../sysdeps/nptl -I../sysdeps/pthread -I../sysdeps/gnu -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix/x86_64 -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/x86_64/64 -I../sysdeps/x86_64/fpu/multiarch -I../sysdeps/x86_64/fpu -I../sysdeps/x86/fpu -I../sysdeps/x86_64/multiarch -I../sysdeps/x86_64 -I../sysdeps/x86 -I../sysdeps/ieee754/ldbl-96 -I../sysdeps/ieee754/dbl-64/wordsize-64 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/flt-32 -I../sysdeps/wordsize-64 -I../sysdeps/ieee754 -I../sysdeps/generic -I.. -I../libio -I. -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /home/sharath.g/glibc-2.20/build/malloc/malloc.o -MD -MP -MF /home/sharath.g/glibc-2.20/build/malloc/malloc.os.dt -MT /home/sharath.g/glibc-2.20/build/malloc/malloc.os

如您所见, malloc 是使用构建的,-fPIC因此我应该能够简单地将其链接为共享库。

但是,当我运行此命令时 gcc -shared -Wl,-soname,libmalloc.so -shared -lpthread -lm -lrt -o /home/sharath.g/glibc-2.20/build/malloc/libmalloc.so /home/sharath.g/glibc-2.20/build/malloc/malloc.o

我收到一个错误 relocation R_X86_64_PC32 against undefined symbol `__libc_multiple_threads' can not be used when making a shared object; recompile with -fPIC

我不明白为什么会出现这个错误?显然我已经编译了 malloc.c-fPIC

0 投票
1 回答
944 浏览

gcc - 位置相关代码

我正在使用使用 sparc v8 架构的处理器。我想编译我的可执行文件,使每个函数调用都是绝对地址。使用 -fPIC 选项生成与位置无关的代码,此标志是否有任何反转?

0 投票
0 回答
928 浏览

ffmpeg - make/cmake 错误:创建共享对象时无法使用针对 `ff_a64_muxer' 的重定位 R_X86_64_32

这是正在发生的事情。我正在尝试设置 OpenSceneGraph,但是在制作过程中遇到了以下错误(添加空格以便于阅读):

此错误不会停止 cmake 进程。稍后(上述错误发生在 39%,进程在 46% 处失败),我收到此错误:

然后该过程停止。

我查看了其他一些解决方案,但他们没有我需要的东西(这里这里)。我已经使用 -fPIC 标志运行了 cmake,但这并没有解决任何问题。

我在这里找到了一个潜在的解决方案,但我不知道如何实现“重新编译您的 FFmpeg/libavcodec/libavformat 并启用 pic”。任何人都可以通过它告诉我或给我一个很好的资源吗?我以前从未做过,我不想弄乱我的电脑。

任何帮助将非常感激。提前致谢!

0 投票
2 回答
757 浏览

shared-libraries - Libsourcey 缺少 -fPIC 编译错误

我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器。

问题是我似乎无法让它工作。我努力在我的 Ubuntu 16.04(cmake 文件中的正则表达式)上 cmake 项目,但现在它已修复。我实际遇到的问题是编译时的共享对象错误:

任何帮助将不胜感激,因为我现在不知道该怎么做。

0 投票
1 回答
2053 浏览

c++ - gcc vs clang:使用 -fPIC 内联函数

考虑这段代码:

使用 gcc 7.2 编译时:

这发出:

但是,当使用 clang 3.9 编译具有相同标志的相同代码时:

gccnext()通过 PLT 调用,clang 内联它。last两者仍然从 GOT 中查找。对于在 linux 上编译,clang 进行优化是否正确,而 gcc 错过了简单的内联,或者 clang 进行优化是错误的,或者这纯粹是 QoI 问题?

0 投票
0 回答
1197 浏览

shared-libraries - 如何使用 fPIC 重新编译静态 gfortran 和 gcc 库

我正在从 Fortran 源代码编译一个共享库(用于 linux 系统),我想将其分发给世界各地的研究人员。我可以用gfortran -shared -o mylib.so .... 不幸的是,ldd mylib.so它揭示了对各种 gfortran 和 gcc 库的依赖,我觉得这完全不能接受:

我希望我的程序能够开箱即用地执行,而不需要用户知道如何在他们的机器上安装 gfortran 以及如何确保他们拥有所需的库(例如 libgfortran.so.3和没有libgfortran.so.4)。

因此,我坚持将所有 gfotran 库静态链接到我的共享对象中。不幸的是gfortran -shared -static-libgfortran -static-libgcc失败并出现错误

显然,.a使用 gfortran 和 gcc 分发的文件没有使用与位置无关的代码进行编译。问题:我需要逐步说明如何使用与位置无关的代码重建上面列出的 gfortran 库文件的静态版本,以便我可以成功构建自己的共享库,并将 gfortran 库静态合并到其中,从而减少依赖。

0 投票
1 回答
325 浏览

python - Pip、pip3 和冲突的 Python 发行版

我在将 python 包 PyTransit 和 ktransit 安装到 Anaconda 3(在 Linux 上)时遇到问题。似乎很多其他人都有类似的错误,但他们的解决方案都没有对我有用。发生了一堆事情:

pip install ktransit给出:

我会尝试将 ./configure 与 --enable-shared 一起使用,但没有配置文件。我尝试添加extra_compile_args = ["-fPIC"], extra_link_args=["-fPIC"]到 setup.py (如https://github.com/h5py/h5py/issues/851),但什么也没做。

pip install pytransit给出不同的错误:

这就是有趣的地方。使用 pip3(或 sudo pip)允许 ktransit 成功安装,但对 pytransit 没有任何作用。pip 和 pip3 似乎绑定到不同的地方:

最后,当我尝试通过 anaconda 在 jupyter notebook 中导入 ktransit 时,它会失败,但是当我在 Jupyter QtConsole 中导入 ktransit 时,它会成功,但似乎包含自身并且不提供实际功能。我的意思是我不能引用模块中的任何内容,并且:

我在想与 /usr/bin 相关联的任何版本的 python 都会以某种方式困扰我……或者我的 gcc 或 libgfortran 有问题?我有 gcc 版本 4.8.5 和 6(gcc --version 提供 4.8.5,但 -update-alternatives 说只有一个版本,6)。

感谢您花时间阅读本文。如果您有任何建议或想法,我将不胜感激!