如何判断lib和dll是32位还是64位?答案是使用微软的dumpbin工具,后面讲了如何使用gcc生成lib和dll
为什么我会考虑这个问题呢?因为我在使用java去调用一个c的lib库的时候,弹出以下警告: D:\work\ideaworkpaces\jdk21Test001\src\main\java\lib\hello.lib: %1 不是有效的 Win32 应用程序。
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
然后我就在想是不是这个lib库是64为导致的,众所周知,java只能调用32位的。
接下来,我开始讲解如何使用dumpbin。
第一步,找出dumpbin.exe文件。
右键打开文件的所在位置。
当然我会直接告诉你dumpbin.exe文件在那里,就在:
第二步,配置一下,环境变量。
第三步,使用dumpbin.exe
dumpbin.exe /headers Hellolib.lib
结果为:
可以看出,该lib包为64位的。
32位的lib包长这样:
当然dll库也是一样的:
dumpbin /headers HelloDll.dll
插嘴一句,其实gcc生成lib库也是非常简单的
以下是.h头文件和实现.h文件的c源文件
先使用
gcc -c hello.c
生成hello.o文件:
然后将.o文件生成lib库:
ar -cr hello.lib hello.o
结果图:
如果只是想用gcc生成32位的lib库的话,那就要在第一步的时候输入:
gcc -m32 -c hello.c
然后输入下面命令就行了。
ar -cr hello.lib hello.o
如果是想用gcc生成dll文件,也是非常简单的
在上面第一步的前提下,输入以下代码就行了:
ar -cr hello.dll hello.o
结果图: