如果我想通过gcc编译动态库,是否需要使用-static?带“-static”和不带“-static”有什么区别

问题描述 投票:0回答:1

-static
和没有
-static

有什么区别

当我使用 gcc 编译共享库时

-static

我遇到错误

/usr/sbin/ld.gold: error: /usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/crtbeginT.o: requires dynamic R_X86_64_32 reloc against '__TMC_END__' which may overflow at runtime; recompile with -fPIC

当我用Google搜索这个错误的解决方案时,我发现这似乎是一个经典问题。

如果我想让它发挥作用,我就应该这样做。

cp crtbeginS.o crtbeginT.o

所以,如果我使用gcc编译动态库,有

-static
和没有
-static
有什么区别。

而且,我应该用

-static
编译一个共享库吗?

顺便说一句,当我在bazel中使用cc_shared_libray构建共享库时,也会出现这个错误,看来cc_shared_library默认使用

-static
编译共享库

c gcc compiler-errors shared-libraries bazel
1个回答
0
投票

只需使用-shared 而不是-static

© www.soinside.com 2019 - 2024. All rights reserved.