【问题标题】:Is there any method to find out a static library is compiled with -fPIC flag有什么方法可以找出使用 -fPIC 标志编译的静态库
【发布时间】:2015-12-10 05:29:05
【问题描述】:

我手头有一堆静态库,它们都有两个版本——32 位和 64 位。 当我使用这些静态库编译成共享库时,奇怪的事情 发生了: 1.我用64位静态库编译了一个64位共享库,一切正常; 2.我用32位静态库编译一个32位共享库,ld告诉我[文本部分不可共享]。

所以,我猜 32 位静态库不使用 -fPIC 标志,但我的同事告诉我他添加了标志。 但我仍然怀疑,有没有办法找出静态库是否添加了 -fPIC 标志。 PS:我知道使用 readelf 或 objdump 可能会得到一些线索,但有没有更好的方法?

【问题讨论】:

标签: c++ static-libraries fpic


【解决方案1】:

我相信,如果你使用的是linux,你可以查看file的输出

file myLib.so
file myLib.a

如果库是用 -fPIC 编译的,输出应该会告诉你

【讨论】:

  • 好吧,我试过了。我自己构建了test.o和test_pic.o,但是输出都是:ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
  • 你是为对象还是库运行file?
  • 我为对象文件运行。如果为库运行,例如 libtest.a,输出只会告诉:'归档文件'。
  • 嗯...尝试运行libtest.so。它应该说的不止这些。 libtest.a 确实是目标文件的存档,所以这就是 file 报告它的原因。
  • 好吧,我需要的是识别一个静态库。所以,这可能行不通。
猜你喜欢
  • 2017-01-05
  • 1970-01-01
  • 2012-09-07
  • 1970-01-01
  • 2023-03-23
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多