fpic相关内容
我有一个嵌入式应用程序,它有一个引导加载程序,它将决定直接从内部闪存运行两个应用程序中的一个.我正在尝试使这些应用程序位置独立,以便它们都可以针对相同的基地址进行编译.没有操作系统,所以没有动态链接器可用.到目前为止,我已经尝试使用 -fpie 选项(使用 gcc)进行构建,但没有取得太大的成功.函数调用似乎是正确的,但全局数据没有正确的地址.本地定义的全局数据的地址偏移量似乎是应用程序与其原始基
..
至少在 Linux 和 Solaris 上,静态库实际上只是一堆已编译的 .o 文件,它们被扔进一个大文件中.编译静态库时,通常会省略 -fpic 标志,因此生成的代码是位置相关的. 现在假设我的静态库是 B.我已经构建了它并得到了生成的 .a 文件,它实际上只是所有位置相关的 .o 文件的一个整体.现在我有一个我想构建的共享库A,我希望它静态链接B.当我构建A时,我自然会使用-fpic标志
..
..
我怎么能用objdump 之类的东西判断一个目标文件是否是用-fPIC 构建的? 解决方案 答案取决于平台.在大多数平台上,如果输出来自 readelf --relocs foo.o |egrep '(GOT|PLT|JU?MP_SLOT)' 为空,则 foo.o 未使用 -fPIC 编译,或者 foo.o 不包含任何代码,其中-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
..
我已阅读GCC 的代码选项生成约定,但无法理解“生成位置无关代码(PIC)"的作用.请举例说明这是什么意思. 解决方案 Position Independent Code 意味着生成的机器代码不依赖于位于特定地址才能工作. 例如跳转将作为相对而不是绝对生成. 伪组装: PIC:无论代码在地址 100 还是 1000 处,这都有效 100: 比较 REG1, REG210
..
使用 eclipse 在 redhat 中用 g++ 64 位编译. 编译错误:../lib-EL5-64bit/libskd3_clnt_30134500.a(skd_clnt.o):制作共享对象时不能使用针对“本地符号"的重定位R_X86_64_32S;用 -fPIC 重新编译 我尝试过的事情我将 -fPIC 添加到 C++ 编译器标志以及链接器标志中.它已经存在于编译器标志中,我
..
我最近收到了一个: ...重定位 R_X86_64_32 针对 `a local symbol' 不能在创建共享对象时使用;用 -fPIC 重新编译 尝试将程序编译为共享库时出错. 现在解决这个问题并不太难(用 -fPIC 重新编译所有依赖项),但经过一些研究发现这个问题只存在于 x86-64 平台上.在 32 位上,任何位置相关的代码仍然可以被动态加载器重新定位. 我能找
..
我正在构建一个在裸机上具有可重定位代码的项目.它是 Cortex M3 嵌入式应用程序.我没有动态链接器,并且在我的启动代码中实现了所有重定位. 大多数情况下它都在工作,但我的本地静态变量似乎定位不正确.它们的地址被我的可执行文件在内存中的偏移量所抵消——即我编译我的代码就好像它是在内存位置 0 处加载的,但我实际上将它加载到位于 0x8000 的内存中.静态局部变量的内存地址偏移了 0x8
..
我有一个嵌入式应用程序,它将有一个引导加载程序,它将决定直接从内部闪存运行两个应用程序中的一个.我试图使这些应用程序位置独立,以便它们都可以针对相同的基址进行编译.没有操作系统,因此没有可用的动态链接器.到目前为止,我已经尝试使用 -fpie 选项(使用 gcc)进行构建,但并没有取得太大的成功.函数调用似乎是正确的,但全局数据没有正确的地址.本地定义的全局数据的地址偏移量似乎是应用程序与其原始基
..
我正在尝试运行 LibSourcey 以使用 Webrtc 流服务器. 问题是我似乎无法让它工作.我努力在我的 Ubuntu 16.04(cmake 文件中的 Regexp)上创建该项目,但现在它已修复 .我实际遇到的问题是编译时的共享对象错误: usr/bin/ld:/home/kimmie/ffmpeg_build/lib/libswresample.a(options.o):重定位
..
出于可移植性的原因,我想使用gfortran创建一个共享库,并将其与libgfortran的静态版本链接.不幸的是,我无法适当地链接不同的对象.我已经找到了一些解决类似问题的帖子,但是我不知道如何解决该问题. 我的源文件都使用-fPIC标志进行编译.当我尝试用标志-shared和-static-libgfortran链接对象时,出现以下错误消息: gfortran -shared -s
..
我正在使用g ++并使用-fPIC选项来编译C ++静态库。我必须使用-fPIC选项,因为最终该库将与其他静态库链接以形成动态库。 在本地测试静态库时,它可以完全正常工作当我不包括-fPIC选项时,它很好。但是,一旦我使用-fPIC编译该库,则在调用这些函数之一时会在运行时收到分段错误错误。 可能包括-fPIC的原因是什么?编译静态库会在运行时导致分段错误? 解决方案 应该在运
..
由于缺少 -fPIC 错误 c>。她是ci20 MIPS开发板上的一位: ... [92 %]构建目标cryptopp-object 扫描目标cryptopp共享的 的依赖关系扫描目标cryptopp-static 的依赖关系链接CXX静态库libcryptopp.a 链接CXX共享库libcryptopp。因此 / usr / bin / ld:CMakeFiles / cr
..
我正在使用NDK 18,并使用x86_64 NDK独立工具链分别编译静态库.我可以成功链接它,但是当我尝试以一种不平凡的方式访问该库时,在生成诸如以下内容时会出现很多错误: ... requires dynamic R_X86_64_PC32 reloc against '_ZZN4seal4util21get_msb_index_genericEPmmE15deBruijnTable64'
..
我正在使用nasm 64将.S编译为.o,然后使用gcc创建一个共享库,如下所示: nasm -f elf64 source/strlen.S nasm -f elf64 source/strchr.S nasm -f elf64 source/memset.S nasm -f elf64 source/strcspn.S nasm -f elf64 source/rindex.S nasm
..
我做的时候得到这个错误: relocation R_X86_64_32 against `vtable for Torch::MemoryDataSet' can not be used when making a shared object; recompile with -fPIC 它说我应该使用-fPIC选项重新编译.我做到了,加上 CFLAGS和CXXFLAGS的-fPIC选项
..
我有一个项目,其中有一个静态库libhelper.a,另一个有我的实际共享库libtestlib.so.我的目标是将libhelper.a链接到libtestlib.so.在Linux/BSD上有可能吗?尝试创建测试程序时,出现以下错误: ./prog1:/usr/local/lib/libtestlib.so.1.0:未定义符号`` 我的猜测是,这是因为libhelper.a并未使用
..
我试图在Fedora中安装带有-fPIC支持的GHC。 我已经抓住了一个源代码tarball,因为它似乎没有二进制文件。 在Build.mk中,我将快速构建类型更改为 p> ifeq“$(BuildFlavour)”“quick” SRC_HC_OPTS = -H64m -O0 -fasm -fPIC GhcStage1HcOpts = -O -fasm -fPIC
..
正如问题所述,我需要应用这些编译器/链接器设置。我正在使用Code :: Blocks 10.05。我浏览了所有的构建设置屏幕。我无法找到应用这些设置的位置。输出结果如下: -------------- Build:Release in 39dll-4-Linux --------------- 链接动态库:./39DLL.so / usr / bin / ld:obj / Re
..