それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

CygwinのmingwコンパイラでDLLを作って使う

Cygwin/mingwコンパイラでクロスコンパイル的なことをしてました。
DLLも作って使ってみたら便利なんじゃないかと思い試しました。

DLLを作って使ってみます。

hello.h

int hello(void);

hello.c

#include "hello.h"
#include <stdio.h>
#include <windows.h>
int hello(void)
{
    printf("Hello Word");
    return 0;
}

test.c

#include "hello.h"

int main(void){
    hello();
}

コンパイル

takuya@letsnote:~/c$ i686-w64-mingw32-gcc -c hello.c
takuya@letsnote:~/c$ i686-w64-mingw32-gcc -shared -o hello.dll hello.o
takuya@letsnote:~/c$ i686-w64-mingw32-gcc test.c -mwindows -lhello -I./ -L./
takuya@letsnote:~/c$

完成したら

./a.exe
hello world

と実行できます。

めでたしめでたし

追記

コンパイルした結果が、cygwin非依存になったことを確認する。

takuya@E350:~/Desktop$ cygcheck.exe a.exe
Found: .\a.exe
.\a.exe
  C:\Windows\system32\kernel32.dll
    C:\Windows\system32\API-MS-Win-Core-RtlSupport-L1-1-0.dll
    C:\Windows\system32\ntdll.dll
    C:\Windows\system32\KERNELBASE.dll
    C:\Windows\system32\API-MS-Win-Core-ProcessThreads-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Heap-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Memory-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Handle-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Synch-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-File-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-IO-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-ThreadPool-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-LibraryLoader-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-NamedPipe-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Misc-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-SysInfo-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Localization-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-ProcessEnvironment-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-String-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Debug-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-ErrorHandling-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Fibers-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Util-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Profile-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Security-Base-L1-1-0.dll
  C:\Windows\system32\msvcrt.dll
    C:\Windows\system32\API-MS-Win-Core-Console-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-DateTime-L1-1-0.dll
    C:\Windows\system32\API-MS-Win-Core-Interlocked-L1-1-0.dll