如何判斷lib和dll是32位還是64位?答案是使用微軟的dumpbin工具,後面講了如何使用gcc生成lib和dll

過移發表於2023-12-13

為什麼我會考慮這個問題呢?因為我在使用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

結果圖:

相關文章