fpic相关内容

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

我有一个嵌入式应用程序,它有一个引导加载程序,它将决定直接从内部闪存运行两个应用程序中的一个.我正在尝试使这些应用程序位置独立,以便它们都可以针对相同的基地址进行编译.没有操作系统,所以没有动态链接器可用.到目前为止,我已经尝试使用 -fpie 选项(使用 gcc)进行构建,但没有取得太大的成功.函数调用似乎是正确的,但全局数据没有正确的地址.本地定义的全局数据的地址偏移量似乎是应用程序与其原始基 ..
发布时间:2022-01-17 13:45:48 其他开发

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

至少在 Linux 和 Solaris 上,静态库实际上只是一堆已编译的 .o 文件,它们被扔进一个大文件中.编译静态库时,通常会省略 -fpic 标志,因此生成的代码是位置相关的. 现在假设我的静态库是 B.我已经构建了它并得到了生成的 .a 文件,它实际上只是所有位置相关的 .o 文件的一个整体.现在我有一个我想构建的共享库A,我希望它静态链接B.当我构建A时,我自然会使用-fpic标志 ..
发布时间:2022-01-11 15:28:53 其他开发

我怎么能用像 objdump 这样的东西来判断一个目标文件是否是用 -fPIC 构建的?

我怎么能用objdump 之类的东西判断一个目标文件是否是用-fPIC 构建的? 解决方案 答案取决于平台.在大多数平台上,如果输出来自 readelf --relocs foo.o |egrep '(GOT|PLT|JU?MP_SLOT)' 为空,则 foo.o 未使用 -fPIC 编译,或者 foo.o 不包含任何代码,其中-fPIC 很重要. ..
发布时间:2021-12-18 22:45:31 其他开发

如何使用 -fPIC 重新编译

我试图在我的 ARM Ubuntu 上按照这个指南重新安装我的 ffmpeg机器.不幸的是,当我编译一个使用这个库的程序时,我得到了以下失败: /usr/bin/ld:/usr/local/lib/libavcodec.a(amrnbdec.o): relocation R_ARM_MOVW_ABS_NC针对`a local symbol'不能在制作共享对象时使用;用 -fPIC 重新编译/us ..
发布时间:2021-12-18 22:38:46 C/C++开发

GCC -fPIC 选项

我已阅读GCC 的代码选项生成约定,但无法理解“生成位置无关代码(PIC)"的作用.请举例说明这是什么意思. 解决方案 Position Independent Code 意味着生成的机器代码不依赖于位于特定地址才能工作. 例如跳转将作为相对而不是绝对生成. 伪组装: PIC:无论代码在地址 100 还是 1000 处,这都有效 100: 比较 REG1, REG210 ..
发布时间:2021-12-18 22:29:54 C/C++开发

将静态(.a)库与共享(.so)库链接,针对本地符号获取错误“重定位 R_X86_64_32S";用 -fPIC"重新编译

使用 eclipse 在 redhat 中用 g++ 64 位编译. 编译错误:../lib-EL5-64bit/libskd3_clnt_30134500.a(skd_clnt.o):制作共享对象时不能使用针对“本地符号"的重定位R_X86_64_32S;用 -fPIC 重新编译 我尝试过的事情我将 -fPIC 添加到 C++ 编译器标志以及链接器标志中.它已经存在于编译器标志中,我 ..
发布时间:2021-11-25 06:14:21 Java开发

为什么 fPIC 在 64 位平台上是绝对必要的,而不是在 32 位平台上?

我最近收到了一个: ...重定位 R_X86_64_32 针对 `a local symbol' 不能在创建共享对象时使用;用 -fPIC 重新编译 尝试将程序编译为共享库时出错. 现在解决这个问题并不太难(用 -fPIC 重新编译所有依赖项),但经过一些研究发现这个问题只存在于 x86-64 平台上.在 32 位上,任何位置相关的代码仍然可以被动态加载器重新定位. 我能找 ..
发布时间:2021-11-24 23:43:36 C#

带有可重定位代码的静态局部变量的问题

我正在构建一个在裸机上具有可重定位代码的项目.它是 Cortex M3 嵌入式应用程序.我没有动态链接器,并且在我的启动代码中实现了所有重定位. 大多数情况下它都在工作,但我的本地静态变量似乎定位不正确.它们的地址被我的可执行文件在内存中的偏移量所抵消——即我编译我的代码就好像它是在内存位置 0 处加载的,但我实际上将它加载到位于 0x8000 的内存中.静态局部变量的内存地址偏移了 0x8 ..
发布时间:2021-11-17 22:28:39 其他开发

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

我有一个嵌入式应用程序,它将有一个引导加载程序,它将决定直接从内部闪存运行两个应用程序中的一个.我试图使这些应用程序位置独立,以便它们都可以针对相同的基址进行编译.没有操作系统,因此没有可用的动态链接器.到目前为止,我已经尝试使用 -fpie 选项(使用 gcc)进行构建,但并没有取得太大的成功.函数调用似乎是正确的,但全局数据没有正确的地址.本地定义的全局数据的地址偏移量似乎是应用程序与其原始基 ..
发布时间:2021-11-17 21:45:32 其他开发

Libsourcey 缺少 -fPIC 编译错误

我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器. 问题是我似乎无法让它工作.我努力在我的 Ubuntu 16.04(cmake 文件中的 Regexp)上创建该项目,但现在它已修复 .我实际遇到的问题是编译时的共享对象错误: usr/bin/ld:/home/kimmie/ffmpeg_build/lib/libswresample.a(options.o):重定位 ..
发布时间:2021-07-23 20:18:25 其他开发

与静态库链接的共享库:重定位错误

出于可移植性的原因,我想使用gfortran创建一个共享库,并将其与libgfortran的静态版本链接.不幸的是,我无法适当地链接不同的对象.我已经找到了一些解决类似问题的帖子,但是我不知道如何解决该问题. 我的源文件都使用-fPIC标志进行编译.当我尝试用标志-shared和-static-libgfortran链接对象时,出现以下错误消息: gfortran -shared -s ..
发布时间:2020-11-13 22:30:42 其他开发

为什么包含-fPIC来编译静态库会在运行时导致分段错误?

我正在使用g ++并使用-fPIC选项来编译C ++静态库。我必须使用-fPIC选项,因为最终该库将与其他静态库链接以形成动态库。 在本地测试静态库时,它可以完全正常工作当我不包括-fPIC选项时,它很好。但是,一旦我使用-fPIC编译该库,则在调用这些函数之一时会在运行时收到分段错误错误。 可能包括-fPIC的原因是什么?编译静态库会在运行时导致分段错误? 解决方案 应该在运 ..
发布时间:2020-10-06 20:48:07 C/C++开发

在CMakeList.txt中检测到32位x86处理器?

由于缺少 -fPIC 错误 c>。她是ci20 MIPS开发板上的一位: ... [92 %]构建目标cryptopp-object 扫描目标cryptopp共享的 的依赖关系扫描目标cryptopp-static 的依赖关系链接CXX静态库libcryptopp.a 链接CXX共享库libcryptopp。因此 / usr / bin / ld:CMakeFiles / cr ..
发布时间:2020-10-03 20:46:03 其他开发

为什么会出现以下Android Studio错误:“使用-fPIC重新编译"?

我正在使用NDK 18,并使用x86_64 NDK独立工具链分别编译静态库.我可以成功链接它,但是当我尝试以一种不平凡的方式访问该库时,在生成诸如以下内容时会出现很多错误: ... requires dynamic R_X86_64_PC32 reloc against '_ZZN4seal4util21get_msb_index_genericEPmmE15deBruijnTable64' ..
发布时间:2020-08-27 22:32:01 其他开发

混合静态库和共享库

我有一个项目,其中有一个静态库libhelper.a,另一个有我的实际共享库libtestlib.so.我的目标是将libhelper.a链接到libtestlib.so.在Linux/BSD上有可能吗?尝试创建测试程序时,出现以下错误: ./prog1:/usr/local/lib/libtestlib.so.1.0:未定义符号`` 我的猜测是,这是因为libhelper.a并未使用 ..

用-fPIC支持编译ghc

我试图在Fedora中安装带有-fPIC支持的GHC。 我已经抓住了一个源代码tarball,因为它似乎没有二进制文件。 在Build.mk中,我将快速构建类型更改为 p> ifeq“$(BuildFlavour)”“quick” SRC_HC_OPTS = -H64m -O0 -fasm -fPIC GhcStage1HcOpts = -O -fasm -fPIC ..
发布时间:2018-06-04 15:19:23 其他开发

在Code :: Blocks中应用--enable-shared或-fPIC

正如问题所述,我需要应用这些编译器/链接器设置。我正在使用Code :: Blocks 10.05。我浏览了所有的构建设置屏幕。我无法找到应用这些设置的位置。输出结果如下: -------------- Build:Release in 39dll-4-Linux --------------- 链接动态库:./39DLL.so / usr / bin / ld:obj / Re ..
发布时间:2018-04-21 11:21:34 其他开发