0

我正在尝试.so为 HIDAPI 库创建一个剥离文件。我从https://github.com/libusb/hidapi.git克隆了这个库。我按照在 Linux 系统上构建的步骤进行操作:

./bootstrap
./configure
make
sudo make install 

它正在.so给定位置生成文件。当我.so使用文件命令检查文件时,我得到“未剥离”。

$ file libhidapi-libusb.so.0.0.0
libhidapi-libusb.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=df7b02a51941902793e795cd5ff7ec3173d3a7fe, with debug_info, not stripped

如何.so在 Linux 发布模式下生成 HIDAPI 库文件?

4

1 回答 1

1

如何在 Linux 上以发布模式构建 HIDAPI 库?

发布模式通常意味着 (1) 优化-O2or -O3,和 (2) 删除调试断言。对于 (2),您通常定义-DNDEBUG. 所以你CPPFLAGS应该包括-DNDEBUG;和你的CFLAGSandCXXFLAGS应该包括-O2or -O3

发布版本可能(也可能不会)剥离符号。在公共图书馆中剥离符号没有多大用处。在封闭源/私有二进制文件中剥离符号更有意义。通常您不想剥离,因为剥离会使堆栈跟踪无用。

话虽如此,剥离二进制文件的标准 GNU Make 目标是make install-strip; 请参阅GNU Make 手册中的16.6 用户标准目标。并从手册中注意:

install-strip不应剥离正在复制以进行安装的构建目录中的可执行文件。它应该只剥离已安装的副本。

另请注意,共享对象必须导出公共符号,因此您可能不会像预期的那样删除尽可能多的符号。您可能还对GCC wiki 上的Symbol Visibility感兴趣。


如何在 Linux 的发布模式下生成 HIDAPI 库的 .so 文件?

总而言之,构建:

  • CPPFLAGS应包括-DNDEBUG
  • CFLAGS应包括-O2-O3
  • CXXFLAGS应包括-O2-O3

并安装:

  • make install-strip
于 2019-10-02T22:00:27.733 回答