- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在构建自己的 Python 扩展时遇到了问题。构建此代码之前(在 Debian 7 Wheezy 上)有效,但现在失败了(在 Ubuntu 15.04 Vivid 上)。
有问题的模块似乎链接正确,但在 import
时出现错误。我已经尝试了两个链接器行,一个使用 g++(它给我一个 fortran 运行时函数的符号丢失错误),另一个使用 gfortran(它给我一个运行时 vtable 的符号丢失错误。)
模块使用:
因此,它需要与 C++ 标准库和 FORTRAN 运行时链接,并构建为一个单一的共享对象文件。
我使用 python build manager that I wrote myself解决此问题:当前发布的版本生成以下链接器行:
gfortran -fno-strict-aliasing -fPIC -pthread -shared \
-Wl,-O1 -Wl,-Bsymbolic-functions -lc -lstdc++ cpp1.o cpp2.o f90.o pyx.o -o \
module.so
(省略了一些文件并缩短了路径。)
这会产生以下导入错误:
ImportError: module.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE
这是apparently对“__cxxabiv1::__class_type_info
”的引用。我认为,这意味着链接器行中的 -lstdc++
条目没有正确完成其工作。
类似地,我尝试修改我的构建系统以生成一条链接到 libgfortran 的 g++ 行,如下所示:
c++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -lgfortran cpp1.o cpp2.o \
f90.o pyx.o -o module.so
同样,这给了我一个丢失的符号错误:
ImportError: module.so: undefined symbol: _gfortran_st_write_done
我也尝试过静态链接,它在链接时本身会出错(比如“无法移动符号”),最初我认为运行时可能会拆分为单独的文件并尝试了 -lfoo
对于许多 foo。但是,我用 scanelf
检查了链接器路径上的 libgfortran.so
文件,它确实包含相关符号。
这种链接方法曾经有效(在 Debian Wheezy 上,很久以前也在 Mac OS X 10.7 上测试过。)我正在努力理解它如何在最新的 ubuntu 上崩溃(使用更新的 GCC,4.9) .
任何有助于调试/解决此问题的想法、理论和测试将不胜感激。
最佳答案
感谢@Marc Glisse对于您的评论:参数的顺序确实是错误的。
如果原始 gfortran
行被修改,使得 -lc
和 -lstdc++
项在最后,ImportError 消失。谢谢!
关于python - 在 python 扩展 (.so) 中同时链接 libgfortran 和 libstdc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30684671/
我正在尝试构建一个只有对 libgfortran 的静态引用的库(最好也是 libgcc)。 但是,如果我使用链接器标志 -static -lgfortran -static-libgfortran
这个问题在这里已经有了答案: Why does the order in which libraries are linked sometimes cause errors in GCC? (9 个
我的任务是将程序放到 docker 环境中,我使用的是 ubuntu 容器。该程序是由fortran编写的。 当我运行程序时,我得到了这个错误 ./cscheck.out: error while l
我正在尝试使用 Anaconda、仅 CPU 模式和 OpenBLAS 在 ubuntu 14.04 LTS 上编译 caffe。不幸的是,我得到一个 ld 错误。 我按照说明添加了 Anaconda
我正在运行 Fedora 28,现在 R 抛出以下错误。我现在无法更新(甚至加载)某些包。 libgfortran.so.4: 无法打开共享对象文件:没有那个文件或目录 我认为问题是 Fedora 现
PyPI 上的 Manylinux-Wheels 都附带了自己的 libgfortran(和 blas)副本。 如何将它们包含在我自己的构建中?我浏览了文档,甚至阅读了存储库中的 travis 脚本,
当我尝试在 MATLAB 中运行 mex 文件时出现以下错误: ??? Invalid MEX-file 'findimps3.mexa64': /MATLAB/bin/glnxa64/../../s
我的一个可执行文件需要 libgfortran.so。通常我只是将 -lgfortran 开关添加到编译行,它会自动与 g++ 链接。但是,我正在尝试使用 CMAKE 查找库: find_librar
我是 *nix 系统的初学者,所以我的行为可能没有意义:) 我正在尝试制作一个由我们大学团队编写的软件,在 Scientific Linux 6.5 上运行。我一直收到此错误:“libgfortran
我对在 linux 上安装我自己的程序和包还很陌生,所以请多关照 ;) 我正在使用 Linux Mint 17.3 (Rosa) 64 位 (Ubuntu Trusty) 并尝试运行位于此处的 sci
当我尝试安装 libgfortran.so.3在 Ubuntu 20.04 上使用: sudo-apt get install libgfortran3 表明: E: Unable to locat
我使用的一个应用程序刚刚更新,它不再在我的系统上运行。当我尝试运行该应用程序时出现错误:加载共享库时出错:libgfortran.so.4:无法打开共享对象文件:没有这样的文件或目录 我查看了我的系统
我在构建自己的 Python 扩展时遇到了问题。构建此代码之前(在 Debian 7 Wheezy 上)有效,但现在失败了(在 Ubuntu 15.04 Vivid 上)。 有问题的模块似乎链接正确,
我正在尝试使用此处 (SFM by Nghiaho) 中的 Structure From Motion 示例。我在运行过程的第二部分遇到了一些问题:我从这里下载了 PMVS2(基于补丁的多 View
我刚回到 Arch 上的 R 中工作,但在尝试打开 R 时出现以下错误 ▶ R /usr/lib64/R/bin/exec/R: error while loading shared librarie
我刚刚休假了一个月,所以无法说出发生这种情况的确切时间,但来自官方 Arch 存储库的 R 现在无法启动,引用 /usr/lib64/R/bin/exec/R: error while loading
我需要编译 Fortran-77 子例程以便在 iOS 上访问。我将 GCC 与 DragonEgg 一起使用插件,因此我可以将 gfortran 与 LLVM 后端一起使用。我关注了this ans
我正在使用 GraalVM 运行 Node 应用程序。我的 Node 代码包含 R 和 Java 互操作代码。 我使用 GraalVM Updater 安装了 R:gu install r Node
我尝试了许多变通办法(酿造升级/更新,brew医生,重新安装gcc和gfortran,导出库路径等)来解决此问题,但没有一个成功。 当我尝试执行Fortran可执行文件时,出现相同的错误消息: dyl
自升级到优胜美地后,我无法使用 gfortran 进行编译。最初我收到“段错误 11”,然后我: 从 http://hpc.sourceforge.net/ 更新到 gcc v.5.0 重新安装了 X
我是一名优秀的程序员,十分优秀!