【发布时间】:2020-10-07 10:45:49
【问题描述】:
我正在尝试在没有超级用户权限的 Ubuntu 18.04 服务器上使用 conda 编译 C++/Fortran 程序。
我能够在我的 Ubuntu 18.04 PC 上使用相同的源代码正确编译程序(也使用 conda),但在服务器上我得到了一堆错误。目前,我遇到了“找不到库 - 未定义引用”错误:
gfortran -o glm -Wl,--export-dynamic obj/glm_globals.o obj/glm_util.o obj/glm_csv.o obj/glm_mobl.o obj/glm_mixu.o obj/glm_wqual.o obj/glm_layers.o obj/glm_surface.o obj/glm_input.o obj/glm_plot.o obj/glm_output.o obj/glm_ncdf.o obj/glm_lnum.o obj/glm_init.o obj/glm_flow.o obj/glm_mixer.o obj/glm_deep.o obj/glm_stress.o obj/glm_bird.o obj/glm_model.o obj/glm_types.o obj/glm_const.o obj/glm_debug.o obj/glm_main.o obj/glm_zones.o -L/local/XXX/my_name/PycharmProjects/glm/glm_source/GLM/../libutil/lib -lutil -L/local/XXX/my_name/anaconda3/lib -lnetcdf -L/usr/lib -L/local/XXX/my_name/PycharmProjects/glm/glm_source/GLM/../libplot/lib -lplot -lgd -lpng -ljpeg -lm -lX11 -lgfortran
/local/XXX/my_name/anaconda3/bin/ld: warning: libpthread.so.0, needed by /local/XXX/my_name/anaconda3/lib/libnetcdf.so, not found (try using -rpath or -rpath-link)
/local/XXX/my_name/anaconda3/bin/ld: warning: libxcb.so.1, needed by /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so, not found (try using -rpath or -rpath-link)
/local/XXX/my_name/anaconda3/bin/ld: warning: libdl.so.2, needed by /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so, not found (try using -rpath or -rpath-link)
/local/XXX/my_name/anaconda3/bin/ld: warning: librt.so.1, needed by /local/XXX/my_name/anaconda3/lib/./libhdf5_hl.so.100, not found (try using -rpath or -rpath-link)
/local/XXX/my_name/anaconda3/bin/ld: warning: libresolv.so.2, needed by /local/XXX/my_name/anaconda3/lib/././libgssapi_krb5.so.2, not found (try using -rpath or -rpath-link)
/local/XXX/my_name/anaconda3/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so: undefined reference to `dlopen@GLIBC_2.2.5'
/local/XXX/my_name/anaconda3/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libX11.so: undefined reference to `xcb_wait_for_event'
/local/XXX/my_name/anaconda3/bin/ld: /local/XXX/my_name/anaconda3/lib/././libkrb5.so.3: undefined reference to `__res_nsearch@GLIBC_2.2.5'
...
collect2: error: ld returned 1 exit status
Makefile:277: recipe for target 'glm' failed
make: *** [glm] Error 1
我可以看到链接器未找到的共享库 libpthread.so.0、librt.so.1、libdl.so.2、libresolv.so.2 是 glibc 的一部分。所以我认为链接到该库存在某种问题。
在之前的尝试中,我尝试使用 conda 安装 glibc。当我尝试编译时,这导致 conda 因“分段错误(核心转储)”而崩溃。我必须重新安装 anaconda 才能让 conda 再次工作。
在过去的几天里,我还尝试按照警告中的建议添加 -rpath,添加 LD_LIBRARY_PATH,使用 -L 添加包含共享库的目录。没有任何效果。
此刻我感到很失落。知道可能出了什么问题吗?
PS:在我的电脑上编译和在服务器上编译的区别在于我在我的电脑上的系统中安装了缺少的库,但在服务器上的 conda 上。因此,在服务器上编译时,我必须使用 -L 添加这些库的位置。
【问题讨论】:
标签: linux compiler-errors conda cross-compiling gfortran