使用 MinGW 构建 Elf 共享库
Building Elf Shared Library with MinGW
我正在尝试使用 MinGW 在 Windows 上构建共享库,请按照本教程进行操作:
Building_elf_shared_libraries
我运行这一步:
$ gcc -fPICenter code here -c libfoo.c -o libfoo.o
$ gcc -Wall -O2 -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0.0 libfoo.o
当我得到 .so 时,我尝试用 readelf 读取它并得到错误:
$ readelf -h libfoo.so.1.0.0
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
我是不是理解错了什么?
是的,您确实误解了一些东西,MinGW 是 gcc 的一个端口,可以使用 gcc 在 windows 上本地(或者如果您的主机是 linux,从 linux 定位到 windows)。默认情况下,它会输出 PE 格式的文件,而不是 ELF。这就是您的 readelf 调用失败的原因。综上所述,我假设您正在尝试构建一个动态链接库,因此我将提供一个很好的教程 here,应该让您朝着正确的方向前进。
我正在尝试使用 MinGW 在 Windows 上构建共享库,请按照本教程进行操作: Building_elf_shared_libraries
我运行这一步:
$ gcc -fPICenter code here -c libfoo.c -o libfoo.o
$ gcc -Wall -O2 -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0.0 libfoo.o
当我得到 .so 时,我尝试用 readelf 读取它并得到错误:
$ readelf -h libfoo.so.1.0.0
readelf: Error: Not an ELF file - it has the wrong magic bytes at the start
我是不是理解错了什么?
是的,您确实误解了一些东西,MinGW 是 gcc 的一个端口,可以使用 gcc 在 windows 上本地(或者如果您的主机是 linux,从 linux 定位到 windows)。默认情况下,它会输出 PE 格式的文件,而不是 ELF。这就是您的 readelf 调用失败的原因。综上所述,我假设您正在尝试构建一个动态链接库,因此我将提供一个很好的教程 here,应该让您朝着正确的方向前进。