- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想用 gfortran 创建一个共享库,出于可移植性的原因将它与静态版本的 libgfortran 链接起来。不幸的是,我没有设法适本地链接不同的对象。我已经找到一些解决类似问题的帖子,但我不知道如何解决这个问题。
我的源文件都是用-fPIC
标志编译的。当我尝试使用标志 -shared
和 -static-libgfortran
链接对象时,我收到以下错误消息:
gfortran -shared -static-libgfortran file1.o file2.o file3.o -o "mynewlib.so"
/usr/bin/ld: ../lib64/libgfortran.a(error.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
../lib64/libgfortran.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
我正在使用 gfortran 4.6.3,它是我在我的服务器上从头开始编译的。安装运行顺利,我没有更改标准配置。我在旧帖子中发现编译器应该配置为 --with-pic
,但是 GCC manual 中没有提到这个标志。 .
问题是来自编译器还是我尝试链接不同对象的方式?知道如何解决这个问题吗?
非常感谢您的帮助!
最佳答案
当您使用静态版本时,libgfortran
未使用 -fPIC
标志进行编译(因此它不包含位置独立代码)。
因此您不能将 libfgortran
(静态)链接到您的共享对象。
我建议您正确打包您的库(例如,作为 Debian 或 Ubuntu 的 .deb
文件)并将 gfortran
添加到您的包的依赖项中。
关于static - 与静态库链接的共享库 : relocation error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12989334/
我正在编译 linux-4.19(gcc-8.2 bintutils-2.31),但是它总是失败并出现如下错误: aarch64-oe-linux-ld.bfd: drivers/platform/g
我在 Macbook Pro 上的 VirtualBox 上运行 Ubuntu 14.04 64 位 MAC。我在 hello_kernel.c 中有以下内容,我想运行它。 #include #in
这是我在 AArch64 上遇到的问题的简化版本: 我有一个宏,可以不断地将一些数据转储到一个部分中。 #define GEN_DATA(_type) \ .pushsection .mydat
我们已经将我们的 subversion 存储库移到了不同的服务器上。我跑了svn swtich --relocate将我的开发工作站存储库更改为新位置。 问题是它看起来像它工作,因为没有报告错误消
这是一个与u-boot相关的基本问题。 为什么 u-boot 代码会自行重定位? 好的,如果 u-boot 是从 NOR-flash 或引导 ROM 空间执行是有道理的,但如果它已经从 SDRAM 运
我们的 svn 存储库的位置已更改为不同的 url,此外主干、分支和标签的相对路径也移动了一点。现在,当我尝试 svn relocate 时,我收到此消息。 无效的重定位目标:'https://my-
当有人这样做时 svn switch ,我知道它将工作目录切换到目标路径。 我想了解 --relocate 的用途。我认为这仅在存储库的 url 发生更改并且想要更新工作副本 url 以指向新的
我正在尝试将工作副本文件夹从旧的专用 svn 服务器移动到新的 svn 服务器,其中包含子文件夹。使用以下重定位命令: svn switch --relocate https://oldserver/
我想用 gfortran 创建一个共享库,出于可移植性的原因将它与静态版本的 libgfortran 链接起来。不幸的是,我没有设法适本地链接不同的对象。我已经找到一些解决类似问题的帖子,但我不知道如
我的应用旨在在 android 6 上运行,据我所知,它不允许加载共享库。 有没有人遇到过这个问题并且能够成功解决? java.lang.UnsatisfiedLinkError: dlopen fa
在我的 Debian x86 32 位中,当我执行 readelf -r/usr/lib/libstdc++.so.6 | grep pthread,我得到这个输出: 000eceac 000062
我想知道为什么某些 Windows 可执行文件确实有重定位。与 DLL 不同,当可执行文件始终可以加载到任何虚拟地址时,为什么需要它? 最佳答案 是的,EXE 中的重定位是可选的,可以去除。但如果我们
我无法在我的 linux 电脑上编译任何东西。我不知道为什么,可能是我安装了一些软件包并弄得一团糟。我已经卸载并重新安装了 gcc 和其他软件包,但没有好消息.. 仍然是这个问题。 这是消息: /us
我正在 Nexus 5 上测试 Android 6.0,我正在使用 Metaio(我知道该服务将于 12 月 15 日结束,但在那一天我们将转移到另一个 AR 平台)。问题是当我启动 ARActivi
我正在尝试将静态库链接到共享库,但出现以下错误 /usr/bin/ld: ../../../libraries/log4cplus/liblog4cplus.a(fileappender.o): re
如果你做 dumpbin/header 它会给你所有 7 个部分的数据转储。 。数据 .idata .rdata .reloc .rsrc 。文本 .textbss 其中 .rsrc 和 .idata
这个问题的变体已被问过很多次,但没有一个答案阐明我感兴趣的内容: 我想(显然...:) 将我的本地工作副本与两个不同服务器上的两个存储库同步。如果我将 svn switch 与 --relocate
我正在尝试为ATmega328 micro编译一些代码,并且我想使用Arduino的库和核心。我正在使用CMake。我已经编译了核心库和代码的所有对象以及Arduino的库。但是,当链接时,它们向我显
我是这个社区的新手,因为我以前从未创建过帐户并提出过问题,但我一直使用这个网站来解决我的编程难题。所以谢谢!不过这一次,我找不到另一个符合我确切需求的问题。如果重复,我深表歉意。 我使用的是 elem
鉴于我已经编译了一些 unix 程序,我可能需要做些什么来将它重新定位到不同的目录并让它继续正常运行。 我正在考虑 Perl,但对其他系统(如 Apache)感兴趣,这些系统在完成后似乎也会失败。为了
我是一名优秀的程序员,十分优秀!