【发布时间】:2018-12-27 07:11:18
【问题描述】:
我正在尝试使用 g++ 生成一个共享库 (libgenerated.so)。共享库使用来自第三方静态库 (libmystatic.a) 的一些功能。为此,我将静态库与共享库链接为:
g++ -shared -o libgenerated.so $(OBJ_FILES) -lmystatic
上述命令为静态库返回以下重定位错误:
relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC
其中指出静态库中的目标文件需要使用-fpic标志进行编译。我无法理解为什么使用相同的静态库(为没有 -fpic 的 Windows 编译)创建 Windows dll 有效?我将 x86_64-w64-mingw32-g++ 用于 Windows DLL。
专家的想法......
【问题讨论】:
-
因为 PIC 是 Windows 上的默认设置,所以不需要这个标志。
-
这是否意味着使用mingw编译的目标文件默认是位置无关的?
-
是的,这是我的理解。
标签: g++ shared-libraries static-libraries mingw-w64