【问题标题】:How to fix " relocation R_X86_64_32s against '.rodata' cannot be used when making a shared object" linking error while compiling fortran files [duplicate]编译fortran文件时如何修复“在制作共享对象时无法使用针对'.rodata'的重定位R_X86_64_32s”链接错误[重复]
【发布时间】:2019-05-25 07:22:09
【问题描述】:

我正在尝试通过 Ubuntu 16.04 中的 Eclipse Juno IDE 编译一个包含 10 个 FORTRAN 文件的 C++ 项目。

项目已编译,.o 文件已生成,链接时抛出消息:

Vc3ded.o(fortran obj 文件) 重定位 R_X86_64_32S 对 '.rodata' 制作共享对象时不能使用:使用 -fPIC 重新编译

我已尝试通过 Eclipse IDE 设置使用 -fPIC 编译项目,并交叉验证了共享对象 .so 文件的路径。

Makefile 如下图所示:

-include ../makefile.init

RM := rm -rf

-include sources.mk
-include src/simgear/xml/subdir.mk

-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

-include ../makefile.defs

all: OWI_SIM

OWI_SIM: $(OBJS) $(USER_OBJS)
    @echo 'Building target: $@'
    @echo 'Invoking: GCC C++ Linker'
    g++ -L/usr/lib -L/usr/local/include -L/usr/local/lib64 -L/usr/lib/x86_64-linux-gnu -o "OWI_SIM" $(OBJS) $(USER_OBJS) $(LIBS)
    @echo 'Finished building target: $@'
    @echo ' '

clean:
    -$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(C_UPPER_DEPS)$(CXX_DEPS)$(OBJS)$(CPP_DEPS)$(C_DEPS) OWI_SIM
    -@echo ' '

.PHONY: all clean dependents
.SECONDARY:

-include ../makefile.targets

【问题讨论】:

  • 你能从你的项目中提取minimal reproducible example吗?每个 C++ 和 Fortran 文件加上用于编译它们的命令行应该可以完成这项工作。包含一堆未定义变量引用的 makefile 对这种情况没有帮助。作为新用户,也可以使用tour 并阅读How to Ask

标签: c++ eclipse linker fortran


【解决方案1】:

我通过在 Eclipse 设置中使用 -fPIC 进行编译来修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    • 2016-06-06
    • 2020-01-26
    相关资源
    最近更新 更多