【问题标题】:Newer GCC refuses to link a project that worked with an older version较新的 GCC 拒绝链接使用旧版本的项目
【发布时间】:2021-08-03 16:01:34
【问题描述】:

我正在尝试使用较新版本的 gcc/ld 构建项目。

makefile 的相关部分(实际名称已编辑)是:

THEIRDIR = third-party/theircomponent/$(THEIRRELEASE)/$(PLATFORM)
THEIRLIBS = $(top_srcdir)/$(THEIRDIR)/lib/theirlib.a
BLDLIBS = $(THEIRLIBS) $(OTHERLIBS)

SRCFILES = thing.cpp main.cpp
OBJS = $(SRCFILES:.cpp=.o)

TARGET = thing

$(TARGET): $(OBJS)
    $(CXX) $(CXXFLAGS) $(LIBPATHS) -o $@ $^ $(BLDLIBS)

其中 THEIRRELEASE 和 PLATFORM 在外部包含的 makefile 中设置,而 LIBPATHS 未在任何地方设置。

theirlib.a 实际上不是库,而是一个包含 theirlib.a.1.2.3.4(无换行符)的文本文件,其中 theirlib.a.1.2.3.4 是实际库,与 theirlib.a 位于同一目录中。

这适用于构建机器,它有

  • gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
  • GNU ld 版本 2.27-43.base.el7_8.1

不幸的是,当我尝试在不同的盒子上构建它时:

  • gcc 版本 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
  • GNU ld(适用于 Ubuntu 的 GNU Binutils)2.34

失败并出现错误:

/usr/bin/ld:/work/product/third-party/theircomponent/1.2.3.4/x86_64-redhat-linux.el7/lib/theirlib.a: file format not recognized; treating as linker script
/usr/bin/ld:/work/product/third-party/theircomponent/1.2.3.4/x86_64-redhat-linux.el7/lib/theirlib.a:0: syntax error

我认为“视为链接器脚本”是使旧工具发生奇迹的理想行为(即使在这种情况下它没有发出任何诊断信息),但它不适用于较新的工具。

我无法控制“他们的”组件,但我可以修改“我们的”makefile,尽管它应该保持向后兼容。

我尝试用@$(top_srcdir)/$(THEIRDIR)/lib/theirlib.a 替换$(top_srcdir)/$(THEIRDIR)/lib/theirlib.a(这不是最好的解决方案,因为它们的lib.a 有时可能会更改为实际的库)。这摆脱了语法错误,但导致

g++: error: theirlib.a.1.2.3.4: No such file or directory

我也尝试指定-L /work/product/third-party/theircomponent/1.2.3.4/x86_64-redhat-linux.el7/lib(使用-Wl, 和直接指定)但没有帮助。

有没有办法让它像使用旧工具一样工作,理想情况下只需将未使用的LIBPATHS 变量设置为一些标志?

【问题讨论】:

  • Ubuntu 20.04:您可以使用 Ubuntu 18.04 存储库中的 gcc-4.8 / g++-4.8。 ..... 或来自drive.google.com/drive/folders/… 的 gcc48-c++_4.8.4-2ubuntu14_amd64.deb ....... 注意:许多旧软件需要旧版 gcc。

标签: linux gcc makefile g++ ld


【解决方案1】:

显然 vboxsf 是罪魁祸首。该文件应该是一个符号链接。哦,好吧。

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多