gpt4 book ai didi

c++ - 共享对象中命名不兼容的符号 - 在哪里查找问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:25:38 25 4
gpt4 key购买 nike

我是 Linux 新手。我可以访问两台 Linux 机器,一台 40 核服务器(A)和一个集群(B)。我试图在两台机器上执行相同的操作,它在 A 上有效,但在 B 上无效。我对两台机器都没有 sudo 权限。 A 运行在 Debian squeeze/sid 上。 B 在内核 2.6.18-238.el5 上运行。我在/etc 下找不到任何发布信息文件。 A 有 gcc 4.6.2,而 B 有 gcc 4.1.2。

我在两台机器上本地编译并安装了给定的网格划分软件 Pkg1 和 Pkg2(给定的求解器)。两者都需要 Libtool 和 automake。 Pkg2 是一个 .so 文件。一切正常,我可以运行这些示例。该代码是使用 mpicxx 构建的。两者都有不同的 mpi 编译器。 A使用openmpi154,B使用qlogicmpi_gnu-0.1.0。

现在我介绍我的代码,比如 Pkg3,一些 .cpp 文件。我用它构建了一个 .so 。我没有使用 Libtool 和 automake。使用了一个简单的 make 文件,以 gcc 作为编译器和链接器(也尝试过 mpicxx)。

在 A 上,Pkg3 运行良好。在 B 上,Pkg3 崩溃。当它尝试使用消息 St8bad_cast 将 Pkg3 中的某些类型动态转换为 Pkg2 中定义的类型时,它会崩溃。对于另一个数据文件,当 Pkg2 中的函数尝试从 Pkg3 转换类型时,它会崩溃,并显示消息“元素类型为 N5ngfem8FE_Segm2E 预期类型为 N5ngfem19ScalarFiniteElementILi1EEE”

我在哪里寻找问题?抱歉说得含糊。这里的所有软件都是开源的,但是软件包太大,无法通过少量工作来制作一个独立的复制品。我既没有使用过 automake 和 Libtools,也没有使用过 mpi,这使问题变得更加复杂。我研究了 Pkg1 和 Pkg2 的 makefile,并尝试用我的简单 makefile 映射 CXX、LDFLAGS 等,但是 automake/libtools 创建的多个间接使得这很困难。

据我了解,Pkg2 中的符号在符号表中的排列方式与 Pkg3 中的符号不​​同。但这应该由链接器来处理吗?!我已经尝试过使用和不使用 Pkg3 的“-Wl,-E”选项。 -fPIC 始终存在。链接 Pkg3 的规则,指向库 Pkg2 ()。我已经发布了 Pkg3 的 makefile 的正文。

 %.o : %.cpp
gcc -O2 -fopenmp -fPIC -DNETGEN_ELTRANS -DUSE_TIMEOFDAY -DLAPACK -I. -I$(NETGENDIR)/../include -c $? -o $@

libmyngsolve.so : $(objects)
gcc -shared -Wl,-E -fopenmp -fPIC $(objects) -L/home/lv70227/elan/ng/lib -lngsolve -o $@

clean:
rm *.o libmyngsolve.so

注1:

Pkg2 的 ./configure 命令具有 -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -Wl,--end-group -lpthread即,它没有 -E 标志。但这就是我指定的方式,作为引用。

注2:

链接规则中定义的路径,-L/home/lv70227/elan/ng/lib,有 pkg​​2.so.0.0.0、两个符号链接(symbolic link),以及 pkg2.la,而不是 pkg2.sa,因为它是由 libtools 创建的。

任何有关问题可能出在哪里的提示都值得赞赏。我在两台机器上都遵循相同的过程,尽量减少偏差以适应 A 和 B 中安装的不同 mpi、gcc、mkl 库。

谢谢你,埃兰。

最佳答案

正如我在评论中告诉您的,GCC 4.1 和 GCC 4.6 非常不同,可能的解决方案是在旧计算机上安装 GCC 4.6(可能通过编译其源代码和所需的依赖项)。

关于c++ - 共享对象中命名不兼容的符号 - 在哪里查找问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com