开源改变世界

在 Ubuntu 20.10 上链接 libtirpc 失败 #1117

推推 grbl 2年前 (2023-01-30) 166次浏览
关闭
3 个任务中的第 1 个
cstrahan 打开了这个问题 2021 年 3 月 26 日 · 6条评论
关闭
3 个任务中的第 1 个

在 Ubuntu 20.10 上链接 libtirpc 失败#1117

cstrahan 打开了这个问题 2021 年 3 月 26 日 · 6条评论

注释

在 Ubuntu 20.10 上链接 libtirpc 失败 #1117

以下是我重现该问题所遵循的步骤:

尝试在 Ubuntu 20.10 上构建:

$ export PYTHONPATH=/usr/local/lib/python2.7/dist-packages/gtk-2.0:/usr/local/lib/python2.7/site-packages/:/usr/local/lib/python2.7/site-packages/gtk-2.0
$ ./configure --with-realtime=uspace --with-python=python2 --with-boost-python=boost_python27
$ BUILD_VERBOSE=1 make

查找构建失败:

Linking linuxcncrsh
g++ -L/home/cstrahan/src/linuxcnc/lib -Wl,-rpath,/home/cstrahan/src/linuxcnc/lib -ltirpc -o ../bin/linuxcncrsh -Wall -g -I. -I/home/cstrahan/src/linuxcnc/src/include -DULAPI -D_GNU_SOURCE -Os -DLOCALE_DIR=\"/usr/share/locale\" -DPACKAGE=\"linuxcnc\" objects/emc/usr_intf/emcrsh.o objects/emc/usr_intf/shcom.o ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0 -lpthread
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_bytes'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_u_long'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_int'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_vector'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_double'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_long'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_float'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdrmem_create'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_short'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_u_char'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_u_int'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_u_short'
/usr/bin/ld: ../lib/libnml.so.0: undefined reference to `xdr_char'
collect2: error: ld returned 1 exit status
make: *** [emc/usr_intf/Submakefile:25: ../bin/linuxcncrsh] Error 1

如果我手动调整并运行最后一个命令,-ltirpc那么libnml.so.0错误就会消失并linuxcncrsh成功链接:

$ g++ -L/home/cstrahan/src/linuxcnc/lib -Wl,-rpath,/home/cstrahan/src/linuxcnc/lib -ltirpc -o ../bin/linuxcncrsh -Wall -g -I. -I/home/cstrahan/src/linuxcnc/src/include -DULAPI -D_GNU_SOURCE -Os -DLOCALE_DIR=\"/usr/share/locale\" -DPACKAGE=\"linuxcnc\" objects/emc/usr_intf/emcrsh.o objects/emc/usr_intf/shcom.o ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0 -lpthread -ltirpc ; echo $?
0

通过以下补丁,我可以成功构建整个 LinuxCNC:

diff --git a/src/emc/iotask/Submakefile b/src/emc/iotask/Submakefile
index e01cf8b11..5ec116e72 100644
--- a/src/emc/iotask/Submakefile
+++ b/src/emc/iotask/Submakefile
@@ -4,11 +4,11 @@ USERSRCS += $(IOSRCS) $(IOV2SRCS)
 
 ../bin/io: $(call TOOBJS, $(IOSRCS)) ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	@$(CXX) $(LDFLAGS) -o $@ $^ 
+	@$(CXX) $(LDFLAGS) -o $@ $^ -ltirpc
 
 ../bin/iov2: $(call TOOBJS, $(IOV2SRCS)) ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	@$(CXX) $(LDFLAGS) -o $@ $^
+	@$(CXX) $(LDFLAGS) -o $@ $^ -ltirpc
 
 TARGETS += ../bin/io ../bin/iov2
 
diff --git a/src/emc/sai/Submakefile b/src/emc/sai/Submakefile
index 9bc28615a..ca64c6f47 100644
--- a/src/emc/sai/Submakefile
+++ b/src/emc/sai/Submakefile
@@ -9,7 +9,7 @@ INCLUDES += emc/sai
 ../bin/rs274: $(call TOOBJS, $(SAISRCS)) ../lib/librs274.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 \
 	../lib/liblinuxcnchal.so.0 ../lib/liblinuxcncini.so.0 ../lib/libpyplugin.so.0
 	$(ECHO) Linking $(notdir $@)
-	$(Q)$(CXX) $(LDFLAGS) -o $@ $^ $(ULFLAGS) $(BOOST_PYTHON_LIBS) -l$(LIBPYTHON) $(READLINE_LIBS)
+	$(Q)$(CXX) $(LDFLAGS) -o $@ $^ -ltirpc $(ULFLAGS) $(BOOST_PYTHON_LIBS) -l$(LIBPYTHON) $(READLINE_LIBS)
 
 $(patsubst ./emc/sai/%,../include/%,$(wildcard ./emc/sai/*.h)): ../include/%.h: ./emc/sai/%.h
 	cp $^ $@
diff --git a/src/emc/task/Submakefile b/src/emc/task/Submakefile
index 0db167a92..0aabc3fe2 100644
--- a/src/emc/task/Submakefile
+++ b/src/emc/task/Submakefile
@@ -5,7 +5,7 @@ USERSRCS += $(EMCSVRSRCS)
 
 ../bin/linuxcncsvr: $(call TOOBJS, $(EMCSVRSRCS)) ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	@$(CXX) $(LDFLAGS) -o $@ $^
+	@$(CXX) $(LDFLAGS) -o $@ $^ -ltirpc
 TARGETS += ../bin/linuxcncsvr
 
 # disabled:	emc/task/iotaskintf.cc
diff --git a/src/emc/usr_intf/Submakefile b/src/emc/usr_intf/Submakefile
index 1ddd6de48..6254c9b4c 100644
--- a/src/emc/usr_intf/Submakefile
+++ b/src/emc/usr_intf/Submakefile
@@ -22,20 +22,20 @@ TARGETS += ../tcl/linuxcnc.so
 
 ../bin/linuxcncrsh: $(call TOOBJS, $(EMCRSHSRCS)) ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -lpthread
+	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -ltirpc -lpthread
 TARGETS += ../bin/linuxcncrsh
 
 ../bin/schedrmt: $(call TOOBJS, $(EMCSCHEDSRCS)) ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -lpthread
+	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -ltirpc -lpthread
 TARGETS += ../bin/schedrmt
 
 ../bin/linuxcnclcd: $(call TOOBJS, $(EMCLCDSRCS)) ../lib/liblinuxcnchal.so.0 ../lib/liblinuxcnc.a ../lib/libnml.so.0 ../lib/liblinuxcncini.so.0
 	$(ECHO) Linking $(notdir $@)
-	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^
+	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -ltirpc
 TARGETS += ../bin/linuxcnclcd
 
 ../bin/halui: $(call TOOBJS, $(HALUISRCS)) ../lib/liblinuxcnc.a ../lib/liblinuxcncini.so.0 ../lib/libnml.so.0 ../lib/liblinuxcnchal.so.0
 	$(ECHO) Linking $(notdir $@)
-	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ 
+	$(Q)$(CXX) $(LDFLAGS) -o $@ $(ULFLAGS) $^ -ltirpc
 TARGETS += ../bin/halui

这是我期望发生的事情:

我希望 LinuxCNC 构建良好。

这是发生了什么:

相反,我遇到了一个链接问题。

有关我的硬件和软件的信息:

  • 我正在使用这个 Linux 发行版和版本:Ubuntu 20.10
  • 我正在使用这个内核版本:5.8.0
  • 我正在使用这个编译器:gcc 10.2.0
  • 我正在使用这个链接器:GNU ld 2.35.1
  • 我在跑步 …
    • 来自 linuxcnc.org 的二进制版本(包括 buildbot.linuxcnc.org)
    • 我自己构建的二进制文件
    • 来自 linuxcnc.org 之外的其他来源的二进制版本
  • 我正在使用这个 LinuxCNC 版本:2.8 标签
  • 我正在使用此用户界面 (GUI)(例如 AXIS、Touchy、gmoccapy 等):N/A
  • 我正在使用此接口硬件供应商和芯片组(例如,并行端口、以太网端口、FPGA 卡):N/A
在 Ubuntu 20.10 上链接 libtirpc 失败 #1117
合作者

您正在构建 2.8 还是 master?Afaik 这已经在 master 中修复了。

在 Ubuntu 20.10 上链接 libtirpc 失败 #1117
作者

2.8(有一个 git clone,我检查了 2.8 标签)。抱歉,如果这已经解决了——尝试搜索问题/PR,但找不到任何关于该领域工作的提及。请问您可以删除对提交/PR 的引用吗?很好奇修复的样子。

在 Ubuntu 20.10 上链接 libtirpc 失败 #1117
作者

没关系,找到了:0dc3ccf

在 Ubuntu 20.10 上链接 libtirpc 失败 #1117
作者

由于这是在 master 中修复的,我将继续并关闭。谢谢@rene-dev