4

これは MSVC (コンパイルとリンク) で動作します。

extern void (_TMDLLENTRY * _TMDLLENTRY tpsetunsol _((void (_TMDLLENTRY *)(char _TM_FAR *, long, long)))) _((char _TM_FAR *, long, long));

undefined referenceしかし、GCC のコンパイルは問題ありませんが、これを指すとリンク フェーズが失敗します。この宣言はすでに GCC と互換性がありますか、それとも他の問題がある可能性がありますか?

#define _TMDLLENTRY __stdcall
#define _TM_FAR

nmMSVC で作成されたオブジェクト ファイルからの出力:

00000000 N .debug$S
00000000 N .debug$S
00000000 N .debug$S
00000000 N .debug$S
00000000 N .debug$T
00000000 i .drectve
00000000 r .rdata
00000000 r .rdata
00000000 r .rdata
00000000 t .text
00000000 t .text
00000000 t .text
         U @__security_check_cookie@4
00aa766f a @comp.id
00000001 a @feat.00
         U ___security_cookie
         U __imp__CloseClipboard@0
         U __imp__EmptyClipboard@0
         U __imp__GlobalAlloc@8
         U __imp__GlobalLock@4
         U __imp__GlobalUnlock@4
         U __imp__MessageBoxA@16
         U __imp__OpenClipboard@4
         U __imp__SetClipboardData@8
00000000 T _CheckBroadcast@0
00000000 T _Inittpsetunsol@0
         U _memcpy
         U _memset
         U _sprintf
         U _tpchkunsol@0
         U _tpsetunsol@4
00000000 T _vCSLMsgHandler@12

nmMinGW コンパイラからの出力:

nm Release/broadc.o
00000000 b .bss
00000000 d .data
00000000 N .debug_abbrev
00000000 N .debug_aranges
00000000 N .debug_info
00000000 N .debug_line
00000000 N .debug_loc
00000000 r .eh_frame
00000000 r .rdata
00000000 t .text
00000104 T _CheckBroadcast@0
         U _CloseClipboard@0
         U _EmptyClipboard@0
         U _GlobalAlloc@8
         U _GlobalLock@4
         U _GlobalUnlock@4
0000010c T _Inittpsetunsol@0
         U _MessageBoxA@16
         U _OpenClipboard@4
         U _SetClipboardData@8
         U _sprintf
         U _tpchkunsol@0
         U _tpsetunsol
00000000 T _vCSLMsgHandler@12

編集: シンボルを見ると_tpsetunsol、MSVC と GCC が異なるシンボルを生成することは明らかです。

GCC プロデュース:U _tpsetunsolおよび MSVC:U _tpsetunsol@4

GCC で MSVC と同じシンボルを生成する方法はありますか?

Edit2: からの出力(定義されnm wtuxws32.libている場所)tpsetunsol

WTUXWS32.dll:
00000000 i .idata$4
00000000 i .idata$5
00000000 t .text
00000000 I __imp__tpsetunsol@4
         U __IMPORT_DESCRIPTOR_WTUXWS32
00000000 T _tpsetunsol@4

GCCで作業することは不可能ですか? ありがとう。

4

0 に答える 0