必要な作業を簡略化できるので、まずは VC10用のプロジェクトを生成する。
C:\jpeg-9b> nmake -f makefile.vc setup-v10次に
C:\jpeg-9b> nmake -f makefile.vc nodebug=1 C:\jpeg-9b> nmake -f makefile.vc nodebug=1 test
でOK。
win32.mak を利用しているので、DLL 版を作成したい場合は、makefile.vc に対して
# You may want to adjust these compiler options: #CFLAGS= $(cflags) $(cdebug) $(cvars) -I. CFLAGS= $(cflags) $(cdebug) $(cvarsdll) -I. # Generally, we recommend defining any configuration symbols in jconfig.h, # NOT via -D switches here. # Link-time options: #LDFLAGS= $(ldebug) $(conlflags) LDFLAGS= $(ldebug) $(dlllflags) # To link any special libraries, add the necessary commands here. #LDLIBS= $(conlibs) LDLIBS= $(guilibsdll) ... ... ... libjpeg.lib: $(LIBOBJECTS) $(RM) libjpeg.lib link -out:libjpeg.dll /MANIFEST /DLL $(LIBOBJECTS) mt -manifest libjpeg.dll.manifest -outputresource:libjpeg.dll;2 # lib -out:libjpeg.lib $(LIBOBJECTS)
として、jmorecfg.h を
//#define GLOBAL(type) type #define GLOBAL(type) __declspec(dllexport) type /* a reference to a GLOBAL function: */ //#define EXTERN(type) extern type #define EXTERN(type) extern __declspec(dllexport) type
にすればよい。ただし、makefile の作りが元々 DLL を考慮していないので、テストに失敗します。テストしたい場合には、CFLAGS, LDFLAGS, LDLIBS 等の変更を戻して、del *.exe してから行えばよい。
参考URL: http://www.amy.hi-ho.ne.jp/jbaba/jpeg13.htm
追記:コメントが逆だったので訂正しました。
LNK2019 とエラーになる場合は、
extern "C" { #include <jconfig.h> #include <libjpeg.h> };
更に INT32 が再定義されるというエラーに悩まされる場合には、jmorecfg.h に以下の修正を入れて、include する前に #define DISABLE_INT32 というようにする。
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ #ifndef DISABLE_INT32 typedef long INT32; #endif #endif
ちなみに、 #define XMD_H をしても良いのだろうけど、影響範囲がパッと見に推定できないので、このようにした。
追記: manifest を埋め込む。
C:> mt -manifest libjpeg.dll.manifest -outputresource:libjpeg.dll;2
とすれば、OK。
2017/10/30: vc10 から link オプションの /MANIFEST がデフォルトでなくなったのでオプションを追記
0 件のコメント:
コメントを投稿